Zibll子比主题美化之WordPress右键菜单美化图文教程

Zibll子比主题美化之WordPress右键菜单美化图文教程

AI 智能摘要
主题铺为您带来一款灵感源自他人博客的右键菜单美化方案,它采用了独特的透明模糊背景设计,并融入了智能识别图片并提供复制图片链接的功能,让您的网站在细节之处也充满惊喜。这里就介绍一下Zibll子比主题美化之WordPress右键菜单美化图文教程。

在WordPress网站的细节优化中,自定义右键菜单是一个能显著提升用户体验和网站个性的亮点。厌倦了浏览器默认的单调右键菜单?主题铺为您带来一款灵感源自他人博客的右键菜单美化方案,它采用了独特的透明模糊背景设计,并融入了智能识别图片并提供复制图片链接的功能,让您的网站在细节之处也充满惊喜。这里就介绍一下Zibll子比主题美化之WordPress右键菜单美化图文教程。

美化亮点概览

  • 设计美学: 菜单背景采用半透明的磨砂玻璃效果(Frosted Glass),结合模糊滤镜,营造出轻盈、现代的视觉感受。圆角边框和精致的描边动画,更添一份优雅。
  • 交互优化:
    • 智能识别图片: 当鼠标右键点击图片时,菜单会自动调整,提供“复制此图片”的选项,极大地方便了用户。
    • 非图片区域: 在非图片区域右键,则显示常规菜单选项。
    • 顶部快捷导航: 菜单顶部新增返回上一页、返回下一页和返回顶部的快捷图标,提升导航效率。
    • 平滑滚动: “返回顶部”功能加入平滑动画,提升用户体验。
    • 复制提示: 复制内容或图片链接成功后,会有简洁的提示框浮现。
  • 功能实用: 集成了复制内容、刷新页面、返回首页、前进/后退、复制地址、搜索选中内容等常用功能。

美化截图:

图片[1]-Zibll子比主题美化之WordPress右键菜单美化图文教程-主题铺

美化教程:手把手教您实现

此美化方案主要通过自定义CSS和JavaScript代码实现,适用于大多数WordPress主题。如果您的网站使用的是子比主题(Zibll),则有更便捷的集成方式。

步骤一:添加自定义CSS样式

将以下CSS代码添加到您的WordPress网站中。通常有以下几种方式:

  • 主题自定义器: 登录WordPress后台,前往“外观”>“自定义”>“额外CSS”(或“自定义CSS”),将代码粘贴进去并保存。
  • 子主题的style.css文件: 如果您使用了子主题,将代码添加到子主题的style.css文件中。
  • (推荐子比主题用户)子比后台设置: 打开子比主题后台设置,找到“全局功能”>“自定义代码”>“底部HTML”,将CSS代码粘贴到<style type="text/css">标签内或直接粘贴在</head>标签之前。
/* 主题铺www.zhutipu.com */
<style type="text/css">
    /* 基础样式重置 */
    a {
        text-decoration: none;
        color: inherit;
    }

    /* 菜单容器 - 修复版 */
div.usercm {
    background: rgba(255, 255, 255, 0.7); /* 半透明白色背景 */
    backdrop-filter: blur(15px) saturate(180%); /* 模糊和饱和度滤镜 */
    -webkit-backdrop-filter: blur(15px) saturate(180%); /* 兼容Safari */
    font-size: 14px;
    width: 160px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); /* 基础阴影 */
    position: absolute;
    display: none; /* 初始隐藏 */
    z-index: 10000; /* 确保在最上层 */
    border-radius: 12px; /* 圆角 */
    border: 1px solid rgba(255, 255, 255, 0.3); /* 细边框 */
    transition: all 0.3s ease; /* 过渡动画 */

    /* 新的描边方案 */
    box-shadow: 
        0 8px 32px rgba(0, 0, 0, 0.1),
        0 0 0 0px rgba(44, 123, 229, 0); /* 初始状态无描边 */
}
/* 鼠标悬停时通过box-shadow添加描边 */
div.usercm:hover {
    box-shadow: 
        0 8px 32px rgba(0, 0, 0, 0.1),
        0 0 0 2px rgba(44, 123, 229, 0.5); /* 悬停时蓝色描边 */
}

    /* 菜单列表 */
    div.usercm ul {
        list-style: none; /* 去除列表点 */
        margin: 0;
        padding: 5px 0;
    }

    /* 菜单项 */
    div.usercm ul li {
        margin: 0;
        padding: 0;
        transition: all 0.2s ease;
    }

    /* 菜单链接 */
    div.usercm ul li a {
        color: #555;
        padding: 10px 20px; /* 增加内边距 */
        display: flex; /* Flex布局使图标和文本对齐 */
        align-items: center; /* 垂直居中对齐 */
        transition: all 0.2s ease;
    }

    /* 菜单图标 */
    div.usercm ul li a i {
        width: 20px;
        margin-right: 12px;
        text-align: center;
        color: #666;
    }

    /* 悬停效果 */
    div.usercm ul li:hover {
        background: rgba(100, 149, 237, 0.2); /* 更强的悬停效果 */
    }

    div.usercm ul li a:hover {
        color: #2c7be5; /* 悬停时文字变蓝 */
    }

    div.usercm ul li a:hover i {
        color: #2c7be5; /* 悬停时图标变蓝 */
    }

    /* 分隔线 */
div.usercm ul li.divider {
    height: 1px;
    background: transparent;
    border-top: 1px dashed #2c7be5; /* 蓝色虚线 */
    margin: 8px 15px;
    opacity: 0.6;
}
div.usercm ul li.divider:hover {
    opacity: 1; /* 悬停时更明显 */
}

    /* 禁用状态 */
    a.disabled {
        color: rgba(204, 204, 204, 0.7) !important; /* 半透明禁用状态 */
        cursor: not-allowed; /* 禁用光标 */
    }

    a.disabled:hover {
        background-color: transparent !important;
    }

      /* 透明风格的顶部导航容器 */
    .quick-nav {
        display: flex;
        justify-content: space-around; /* 均匀分布 */
        padding: 10px 10px;
        background: transparent; /* 完全透明背景 */
        border-bottom: 1px solid rgba(255, 255, 255, 0.1); /* 极细的分隔线 */
        margin-bottom: 5px;
    }

    /* 透明导航按钮基础样式 */
    .quick-nav a {
        padding: 8px 12px;
        border-radius: 6px;
        transition: all 0.25s ease;
        color: rgba(85, 85, 85, 0.9); /* 半透明文字 */
        font-size: 15px;
        background: transparent; /* 透明背景 */
    }

    /* 悬停效果 - 优雅的淡入背景 */
    .quick-nav a:hover {
        background: rgba(100, 149, 237, 0.15); /* 轻微蓝色背景 */
        color: #2c7be5; /* 悬停时文字变蓝 */
    }

    /* 点击效果 */
    .quick-nav a:active {
        background: rgba(100, 149, 237, 0.25); /* 点击时背景加深 */
        transform: scale(0.98); /* 轻微缩小效果 */
    }

    /* 图标动画 */
    .quick-nav a i {
        transition: transform 0.2s ease;
    }

    .quick-nav a:hover i {
        transform: scale(1.1); /* 悬停时图标轻微放大 */
    }

    /* 按钮边框动画 (可选) */
    .quick-nav a {
        position: relative;
    }

    .quick-nav a::after {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        border-radius: 6px;
        border: 1px solid transparent;
        transition: border-color 0.3s ease;
    }

    .quick-nav a:hover::after {
        border-color: rgba(100, 149, 237, 0.3); /* 悬停时显示淡淡边框 */
    }

    /* 复制成功/失败提示框 */
    .copy-tooltip {
    position: absolute;
    background: rgba(0, 0, 0, 0.7);
    color: white;
    padding: 5px 10px;
    border-radius: 4px;
    font-size: 12px;
    opacity: 0; /* 初始隐藏 */
    transition: opacity 0.3s;
    pointer-events: none; /* 不响应鼠标事件 */
    z-index: 10001;
    white-space: nowrap; /* 不换行 */
    }
</style>

步骤二:添加HTML结构

将以下HTML代码添加到您网站的<body>标签内部的任意位置。通常,为了不影响页面布局,可以将其放在<footer>标签之后,或直接放在WordPress主题的footer.php文件中。

对于子比主题用户: 同样,在子比后台设置“全局功能”>“自定义代码”>“底部HTML”中,将这段HTML代码粘贴到</body>标签之前。

<div class="usercm" style="display: none;">
    <!-- 新增的顶部导航图标 -->
    <div class="quick-nav">
        <a href="javascript:history.go(-1);" rel="external nofollow" title="返回上一页"><i class="fa fa-arrow-left"></i></a>
        <a href="javascript:history.go(1);" rel="external nofollow" title="返回下一页"><i class="fa fa-arrow-right"></i></a>
        <a href="javascript:smoothScrollToTop();" rel="external nofollow" title="返回顶部"><i class="fa fa-arrow-up"></i></a>
    </div>

    <ul>
        <!-- 注意:此处的“成为邻居”链接和图标在JS中会被动态修改 -->
        <li><a href="https://www.zhutipu.com/frieds"><i class="fa fa-meh-o fa-fw"></i><span>成为邻居</span></a></li>
        <li class="divider"></li>
        <li><a href="javascript:void(0);" onclick="getSelect();"><i class="fa fa-copy"></i><span>复制内容</span></a></li>
        <li><a href="javascript:window.location.reload();"><i class="fa fa-refresh fa-fw"></i><span>刷新页面</span></a></li>
        <li class="divider"></li>
        <li><a href="https://www.zhutipu.com/"><i class="fa fa-home"></i><span>返回首页</span></a></li>
        <li><a href="javascript:history.go(1);"><i class="fa fa-arrow-right"></i><span>前进</span></a></li>
        <li><a href="javascript:history.go(-1);"><i class="fa fa-arrow-left"></i><span>后退</span></a></li>
        <li class="divider"></li>
        <li><a href="javascript:void(0);" onclick="copyPageUrl();"><i class="fa fa-link"></i><span>复制地址</span></a></li>
        <li><a href="javascript:void(0);" onclick="baiduSearch();"><i class="fa fa-search"></i><span>搜索选中内容</span></a></li>
    </ul>
</div>

主题铺提示:

  • Font Awesome图标: 上述HTML代码使用了Font Awesome图标(例如<i class="fa fa-arrow-left"></i>)。请确保您的WordPress主题已经加载了Font Awesome库,否则图标可能无法正常显示。如果未加载,您需要手动引入Font Awesome CDN链接到您的网站头部(header.php)。
  • rel="external nofollow" 建议检查这些重复的rel属性,通常一个就足够了。

步骤三:添加JavaScript脚本

将以下JavaScript代码添加到您网站的底部,通常是</body>标签之前。

对于子比主题用户: 在子比后台设置“全局功能”>“自定义代码”>“底部HTML”中,将这段JavaScript代码粘贴在</body>标签之前。

<script type="text/javascript">
// 顶部平滑滚动函数
let scrollAnimationId = null;
function smoothScrollToTop() {

    if (scrollAnimationId) {
        cancelAnimationFrame(scrollAnimationId);
    }

    const startPosition = window.pageYOffset;
    const startTime = performance.now();
    const duration = 800; // 动画持续时间(ms)

    const animateScroll = (currentTime) => {
        const elapsed = currentTime - startTime;
        const progress = Math.min(elapsed / duration, 1);

        // 使用缓动函数使滚动更自然
        const easeProgress = easeOutCubic(progress);

        window.scrollTo(0, startPosition * (1 - easeProgress));

        if (progress < 1) {
            scrollAnimationId = requestAnimationFrame(animateScroll);
        } else {
            scrollAnimationId = null;
        }
    };

    // 缓动函数 - 平滑减速
    function easeOutCubic(t) {
        return (--t) * t * t + 1;
    }

    // 监听用户滚动中断
    const handleUserScroll = () => {
        if (scrollAnimationId) {
            cancelAnimationFrame(scrollAnimationId);
            scrollAnimationId = null;
            window.removeEventListener('wheel', handleUserScroll);
            window.removeEventListener('touchmove', handleUserScroll);
        }
    };

    window.addEventListener('wheel', handleUserScroll, { passive: true });
    window.addEventListener('touchmove', handleUserScroll, { passive: true });

    scrollAnimationId = requestAnimationFrame(animateScroll);
}

// 保持原有功能不变 (jQuery 扩展)
(function(a) {
    a.extend({
        mouseMoveShow: function(b) {
            var d = 0,
                c = 0,
                h = 0,
                k = 0,
                e = 0,
                f = 0;

            var menu = a(b); // 右键菜单容器
            var isMenuShowing = false; // 菜单是否显示
            var isOnImage = false; // 是否在图片上
            var imageUrl = ''; // 图片URL

            // 创建提示框元素
            var tooltip = $('<div class="copy-tooltip">复制成功</div>').appendTo('body');

            // 添加CSS过渡效果
            menu.css({
                'transition': 'left 0.3s ease, top 0.3s ease'
            });

            // 检测是否在图片上并修改菜单项
            function checkIfOnImage(target) {
                var imgElement = $(target).closest('img'); // 使用jQuery的closest()
                if (imgElement.length) { // 检查元素是否存在
                    isOnImage = true;
                    imageUrl = imgElement.attr('src'); // 获取图片src
                    // 修改"成为邻居"为"复制图片链接"
                    menu.find('a[href="https://www.zhutipu.com/frieds"] i')
                        .removeClass('fa-meh-o')
                        .addClass('fa-link');
                    menu.find('a[href="https://www.zhutipu.com/frieds"] span')
                        .text('复制此图片');
                } else {
                    isOnImage = false;
                    imageUrl = '';
                    // 恢复"成为邻居"
                    menu.find('a[href="https://www.zhutipu.com/frieds"] i')
                        .removeClass('fa-link')
                        .addClass('fa-meh-o');
                    menu.find('a[href="https://www.zhutipu.com/frieds"] span')
                        .text('成为邻居');
                }
            }

            // 复制图片链接函数
            function copyImageUrl() {
                if (!isOnImage || !imageUrl) return false;

                try {
                    var tempInput = document.createElement('input');
                    tempInput.value = imageUrl;
                    document.body.appendChild(tempInput);
                    tempInput.select();
                    var success = document.execCommand('copy');
                    document.body.removeChild(tempInput);

                    if (success) {
                        // 显示提示框
                        var menuPos = menu.offset();
                        tooltip.text('复制成功').css({
                            'background': 'rgba(0,0,0,0.7)',
                            'left': menuPos.left + menu.outerWidth() + 10,
                            'top': menuPos.top
                        }).stop().css('opacity', 1)
                          .delay(1500)
                          .animate({opacity: 0}, 500);
                        return true;
                    } else {
                        throw new Error('复制失败');
                    }
                } catch (err) {
                    tooltip.text('复制失败').css({
                        'background': 'rgba(255,0,0,0.7)',
                        'left': menu.offset().left + menu.outerWidth() + 10,
                        'top': menu.offset().top
                    }).stop().css('opacity', 1)
                      .delay(1500)
                      .animate({opacity: 0}, 500);
                    return false;
                }
            }

            // 鼠标移动事件
            a(window).mousemove(function(g) {
                d = a(window).width();
                c = a(window).height();
                h = g.clientX;
                k = g.clientY;
                e = g.pageX;
                f = g.pageY;

                // 调整菜单位置防止超出窗口
                h + menu.width() >= d && (e = e - menu.width() - 5);
                k + menu.height() >= c && (f = f - menu.height() - 5);
            });

            // 阻止默认右键菜单并显示自定义菜单
            a("html").on("contextmenu", function(c) {
                if (3 == c.which) { // 鼠标右键
                    checkIfOnImage(c.target); // 检查是否在图片上

                    if (isMenuShowing) {
                        // 菜单已显示,平滑移动到新位置
                        menu.css({
                            left: e,
                            top: f
                        });
                    } else {
                        // 菜单未显示,显示菜单
                        menu.css({
                            left: e,
                            top: f
                        }).show();
                        isMenuShowing = true;
                    }
                    c.preventDefault(); // 阻止默认右键菜单
                }
            });

            // 点击页面任意处隐藏菜单
            a("html").on("click", function() {
                menu.hide();
                isMenuShowing = false;
            });

            // 修改"成为邻居"的点击事件,使其在图片上时复制图片链接
            menu.on('click', 'a[href="https://www.zhutipu.com/frieds"]', function(e) {
                if (isOnImage && imageUrl) {
                    e.preventDefault(); // 阻止默认跳转
                    copyImageUrl();
                    menu.hide();
                    isMenuShowing = false;
                }
            });

            // 新增:滚动时隐藏菜单
            a(window).scroll(function() {
                if (isMenuShowing) { // 仅在菜单显示时执行
                    menu.hide();
                    isMenuShowing = false;
                }
            });
        },
        // 禁用浏览器默认右键菜单
        disabledContextMenu: function() {
            window.oncontextmenu = function() {
                return !1
            }
        }
    })
})(jQuery);

// 复制选中内容函数
function getSelect() {
    var selectedText = window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;
    if (selectedText === "") {
        // 使用layer.msg需要引入layer.js,这里暂时用alert替代或确保已引入layer.js
        alert("请先选择要复制的内容!"); 
    } else {
        document.execCommand("Copy");
        // 显示复制成功提示
        var menu = $('.usercm');
        var tooltip = $('.copy-tooltip').text('复制成功');
        var menuPos = menu.offset();
        tooltip.css({
            'left': menuPos.left + menu.outerWidth() + 10,
            'top': menuPos.top
        }).stop().css('opacity', 1)
          .delay(1500)
          .animate({opacity: 0}, 500);
    }
}

// 搜索选中内容函数
function baiduSearch() {
    var selectedText = window.getSelection ? window.getSelection().toString() : document.selection.createRange().text;
    if (selectedText === "") {
        alert("请先选择要搜索的内容!"); // 同上,可替换为layer.msg
    } else {
        // 注意:此处搜索链接为主题铺zhutipu.com站内搜索,如果需要百度搜索,请修改为:
        // window.open("https://www.baidu.com/s?wd=" + encodeURIComponent(selectedText));
        window.open("https://www.zhutipu.com/?s=" + encodeURIComponent(selectedText));
    }
}

// 页面加载完成后执行
$(function() {
    // 判断是否为移动设备,如果是则不启用自定义右键菜单
    var userAgent = navigator.userAgent;
    var mobileRegex = /Android|iPhone|SymbianOS|Windows Phone|iPad|iPod/i;
    var isMobile = mobileRegex.test(userAgent);

    if (!isMobile) { // 如果不是移动设备
        $.mouseMoveShow(".usercm"); // 启用自定义右键菜单显示逻辑
        $.disabledContextMenu(); // 禁用浏览器默认右键菜单
    }
});

// 复制当前页面地址函数
function copyPageUrl() {
    try {
        var tempInput = document.createElement('input');
        tempInput.value = window.location.href;
        document.body.appendChild(tempInput);
        tempInput.select();
        var success = document.execCommand('copy');
        document.body.removeChild(tempInput);

        if (success) {
            // 显示提示框
            var menu = $('.usercm');
            var tooltip = $('.copy-tooltip').text('已复制页面地址');
            var menuPos = menu.offset();
            tooltip.css({
                'left': menuPos.left + menu.outerWidth() + 10,
                'top': menuPos.top
            }).stop().css('opacity', 1)
              .delay(1500)
              .animate({opacity: 0}, 500);
            return true;
        } else {
            throw new Error('复制失败');
        }
    } catch (err) {
        $('.copy-tooltip').text('复制失败').css({
            'background': 'rgba(255,0,0,0.7)',
            'left': $('.usercm').offset().left + $('.usercm').outerWidth() + 10,
            'top': $('.usercm').offset().top
        }).stop().css('opacity', 1)
          .delay(1500)
          .animate({opacity: 0}, 500);
        return false;
    }
}
</script>

最后总结

  1. jQuery依赖: 这段JavaScript代码依赖于jQuery库。WordPress默认会加载jQuery,但请确保您的主题没有禁用或冲突。
  2. layer.msg getSelect()baiduSearch()函数中提到了layer.msg,这通常是Layui框架的一部分。如果您的网站没有引入Layui,请将layer.msg替换为alert()或其他您网站已引入的提示框函数,否则可能会报错。
  3. 搜索链接: baiduSearch()函数中的搜索链接https://www.zhutipu.com/?s=是站内搜索。如果您希望实现百度搜索选中内容,请将其修改为https://www.baidu.com/s?wd=" + encodeURIComponent(selectedText)
  4. 图片复制功能: 复制图片链接的功能依赖于document.execCommand('copy'),此API在某些浏览器环境或安全策略下可能受限。
  5. 版权信息: 代码中保留了原作者的版权信息/*主题铺 www.zhutipu.com */,请尊重原作者的劳动成果。
  6. 适应性: 由于每个WordPress主题的结构和CSS可能不同,您可能需要根据您的主题对CSS样式进行微调,以达到最佳的视觉效果。

实施建议:

完成代码添加后,请清除您的网站缓存和浏览器缓存,然后刷新页面并尝试右键点击,即可体验全新的自定义右键菜单。主题铺认为,这种细致的用户体验优化,将使您的WordPress博客更具吸引力,给访问者留下深刻印象。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容