AI正在绞尽脑汁想思路ING···
BiのAI摘要
HunYuan-Lite

# 演示

本站右键即可查看,和原有菜单相比比较美观

# 新建pug文件

在 `\themes\butterfly\layout\includes`新建 `rightmenu.pug`

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #rightMenu.js-pjax
        .rightMenu-group.rightMenu-small
            a.rightMenu-item(href="javascript:window.history.back();")
                i.fa.fa-arrow-left
            a.rightMenu-item(href="javascript:window.history.forward();")
                i.fa.fa-arrow-right
            a.rightMenu-item(href="javascript:window.location.reload();")
                i.fa.fa-refresh
            a.rightMenu-item(href="javascript:window.scrollTo(0, 0);")
                i.fa.fa-arrow-up
        .rightMenu-group.rightMenu-line.hide#menu-text
            a.rightMenu-item(href="javascript:rmf.copySelect();")
                i.fa.fa-copy
                span='复制'
            a.rightMenu-item(href="javascript:rmf.searchinThisPage();")
                i.fas.fa-search
                span='站内搜索'
        .rightMenu-group.rightMenu-line.hide#menu-too
            a.rightMenu-item(href="javascript:window.open(window.getSelection().toString());window.location.reload();")
                i.fa.fa-link
                span='转到链接'
        .rightMenu-group.rightMenu-line.hide#menu-paste
            a.rightMenu-item(href='javascript:rmf.paste()')
                i.fa.fa-copy
                span='粘贴'
        .rightMenu-group.rightMenu-line.hide#menu-post
            a.rightMenu-item(href="javascript:rmf.copyWordsLink()")
                i.fa.fa-link
                span='复制本文地址'
        .rightMenu-group.rightMenu-line.hide#menu-to
            a.rightMenu-item(href="javascript:rmf.openWithNewTab()")
                i.fa.fa-window-restore
                span='新窗口打开'
            a.rightMenu-item(href="javascript:rmf.open()")
                i.fa.fa-link
                span='转到链接'
            a.rightMenu-item(href="javascript:rmf.copyLink()")
                i.fa.fa-copy
                span='复制链接'
        .rightMenu-group.rightMenu-line.hide#menu-img
            a.rightMenu-item(href="javascript:rmf.saveAs()")
                i.fa.fa-download
                span='保存图片'
            a.rightMenu-item(href="javascript:rmf.openWithNewTab()")
                i.fa.fa-window-restore
                span='在新窗口打开'
            a.rightMenu-item(href="javascript:rmf.click()")
                i.fa.fa-arrows-alt
                span='全屏显示'
            a.rightMenu-item(href="javascript:rmf.copyLink()")
                i.fa.fa-copy
                span='复制图片链接'
        .rightMenu-group.rightMenu-line
            a.rightMenu-item(href="javascript:randomPost()")
                i.fa.fa-paper-plane
                span='随便逛逛'
            a.rightMenu-item(href="javascript:rmf.switchDarkMode();")
                i.fa.fa-moon
                span='昼夜切换'
            a.rightMenu-item(href="javascript:rmf.translate();")
                i.iconfont.icon-fanti
                span='繁简转换'
            if is_post()||is_page()
                a.rightMenu-item(href="javascript:rmf.switchReadMode();")
                    i.fa.fa-book
                    span='阅读模式'
            a.rightMenu-item(href="javascript:pjax.loadUrl(\"/privacy/\");")
                i.fa.fa-info-circle
                span='隐私声明'
            a.rightMenu-item(href="javascript:pjax.loadUrl(\"/cookie/\");")
                i.fa.fa-info-circle
                span='Cookie协议'
            a.rightMenu-item(href="javascript:pjax.loadUrl(\"/cc/\");")
                i.fa.fa-info-circle
                span='版权声明'

# 新建js文件

创建 `\themes\butterfly\source\js\rightmenu.js`

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    function setMask() {//设置遮罩层
        if (document.getElementsByClassName("rmMask")[0] !== undefined) {
            return document.getElementsByClassName("rmMask")[0];
        }
        mask = document.createElement('div');
        mask.className = "rmMask";
        mask.style.width = window.innerWidth + 'px';
        mask.style.height = window.innerHeight + 'px';
        mask.style.background = '#fff';
        mask.style.opacity = '.0';
        mask.style.position = 'fixed';
        mask.style.top = '0';
        mask.style.left = '0';
        mask.style.zIndex = 998;
        document.body.appendChild(mask);
        document.getElementById("rightMenu").style.zIndex = 19198;
        return mask;
    }

    function insertAtCursor(myField, myValue) {

        //IE 浏览器
        if (document.selection) {
            myField.focus();
            sel = document.selection.createRange();
            sel.text = myValue;
            sel.select();
        }

        //FireFox、Chrome等
        else if (myField.selectionStart || myField.selectionStart === '0') {
            var startPos = myField.selectionStart;
            var endPos = myField.selectionEnd;

            // 保存滚动条
            var restoreTop = myField.scrollTop;
            myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);

            if (restoreTop > 0) {
                myField.scrollTop = restoreTop;
            }

            myField.focus();
            myField.selectionStart = startPos + myValue.length;
            myField.selectionEnd = startPos + myValue.length;
        } else {
            myField.value += myValue;
            myField.focus();
        }
    }

    let rmf = {};
    rmf.showRightMenu = function (isTrue, x = 0, y = 0) {
        let $rightMenu = $('#rightMenu');
        $rightMenu.css('top', x + 'px').css('left', y + 'px');

        if (isTrue) {
            $rightMenu.show();
        } else {
            $rightMenu.hide();
        }
    }
    rmf.switchDarkMode = function () {
        const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
        if (nowMode === 'light') {
            activateDarkMode()
            saveToLocal.set('theme', 'dark', 2)
            GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night)
        } else {
            activateLightMode()
            saveToLocal.set('theme', 'light', 2)
            GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day)
        }
        // handle some cases
        typeof utterancesTheme === 'function' && utterancesTheme()
        typeof FB === 'object' && window.loadFBComment()
        window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
        switchPostChart();
    };

    rmf.copyWordsLink = function () {
        const decodedUrl = decodeURIComponent(window.location.href); // 解码 URL
        navigator.clipboard.writeText(decodedUrl)
            .then(() => {
                Snackbar.show({
                    text: '链接复制成功！快去分享吧！',
                    pos: 'top-right',
                    showAction: false
                });
            })
    };

    rmf.switchReadMode = function () {
        const $body = document.body
        $body.classList.add('read-mode')
        const newEle = document.createElement('button')
        newEle.type = 'button'
        newEle.className = 'fas fa-sign-out-alt exit-readmode'
        $body.appendChild(newEle)

        function clickFn() {
            $body.classList.remove('read-mode')
            newEle.remove()
            newEle.removeEventListener('click', clickFn)
        }

        newEle.addEventListener('click', clickFn)
    }

    //复制选中文字
    rmf.copySelect = function () {
        navigator.clipboard.writeText(document.getSelection().toString()).then(() => {
            Snackbar.show({
                text: '已复制选中文字！',
                pos: 'top-right',
                showAction: false,
            });
        });
    }

    //回到顶部
    rmf.scrollToTop = function () {
        document.getElementsByClassName("menus_items")[1].setAttribute("style", "");
        document.getElementById("name-container").setAttribute("style", "display:none");
        btf.scrollToDest(0, 500);
    }
    rmf.translate = function () {
        document.getElementById("translateLink").click();
    }
    rmf.searchinThisPage = () => {
        let mask = setMask(); // 确保 mask 元素存在于 document.body 中
        document.getElementsByClassName("local-search-box--input")[0].value = window.getSelection().toString();
        document.getElementsByClassName("search")[0].click();
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent("input", false, false);
        document.getElementsByClassName("local-search-box--input")[0].dispatchEvent(evt);

        // 在尝试移除 mask 元素之前检查它是否存在于 document.body 中
        if (document.body.contains(mask)) {
            document.body.removeChild(mask);
        }
    }

    document.body.addEventListener('touchmove', function (e) {

    }, {passive: false});

    function popupMenu() {
        //window.oncontextmenu=function(){return false;}
        window.oncontextmenu = function (event) {
            Snackbar.show({
                text: '按住 Ctrl 再点击右键，即可恢复原界面哦',
                pos: 'bottom-left',
                showAction: false
            });
            if (event.ctrlKey || document.body.clientWidth < 900) return true;
            $('.rightMenu-group.hide').hide();
            if (document.getSelection().toString()) {
                $('#menu-text').show();
            }
            if (document.getElementById('post')) {
                $('#menu-post').show();
            } else {
                if (document.getElementById('page')) {
                    $('#menu-post').show();
                }
            }
            var el = window.document.body;
            el = event.target;
            var a = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:\/?#[\]@!$&'*+,;=]+$/
            if (a.test(window.getSelection().toString()) && el.tagName !== "A") {
                $('#menu-too').show()
            }
            if (el.tagName === 'A') {
                $('#menu-to').show()
                rmf.open = function () {
                    if (el.href.indexOf("http://") === -1 && el.href.indexOf("https://") === -1 || el.href.indexOf("blog.june-pj.cn") !== -1) {
                        pjax.loadUrl(el.href)
                    } else {
                        location.href = el.href
                    }
                }
                rmf.openWithNewTab = function () {
                    window.open(el.href);
                    // window.location.reload();
                }
                rmf.copyLink = function () {
                    const url = el.href;
                    navigator.clipboard.writeText(url);
                    Snackbar.show({
                        text: '链接复制成功！快去分享吧！',
                        pos: 'top-right',
                        showAction: false
                    });
                };
            }
            if (el.tagName === 'IMG') {
                $('#menu-img').show()
                rmf.openWithNewTab = function () {
                    window.open(el.src);
                    // window.location.reload();
                }
                rmf.click = function () {
                    el.click()
                }
                rmf.copyLink = function () {
                    const url = el.src
                    navigator.clipboard.writeText(url);
                    Snackbar.show({
                        text: '链接复制成功！快去分享吧！',
                        pos: 'top-right',
                        showAction: false
                    });
                }
                rmf.saveAs = function () {
                    var a = document.createElement('a');
                    a.href = el.src;
                     // 获取图片的文件名部分
                    a.download = el.src.split('/').pop(); // 使用图片的文件名作为下载文件名
                    a.style.display = 'none'; // 隐藏下载链接
                    document.body.appendChild(a);
                    a.click();
                    document.body.removeChild(a);
                }
            } else if (el.tagName === "TEXTAREA" || el.tagName === "INPUT") {
                $('#menu-paste').show();
                // rmf.paste=function(){
                //     input.addEventListener('paste', async event => {
                //         event.preventDefault();
                //         const text = await navigator.clipboard.readText();
                //         el.value+=text;
                //       });
                // }
                rmf.paste = function () {
                    navigator.permissions
                        .query({
                            name: 'clipboard-read'
                        })
                        .then(result => {
                            if (result.state === 'granted' || result.state === 'prompt') {
                                //读取剪贴板
                                navigator.clipboard.readText().then(text => {
                                    console.log(text)
                                    insertAtCursor(el, text)
                                })
                            } else {
                                Snackbar.show({
                                    text: '请允许读取剪贴板！',
                                    pos: 'top-center',
                                    showAction: false,
                                })
                            }
                        })
                }
            }
            let pageX = event.clientX + 10;
            let pageY = event.clientY;
            let rmWidth = $('#rightMenu').width();
            let rmHeight = $('#rightMenu').height();
            if (pageX + rmWidth > window.innerWidth) {
                pageX -= rmWidth + 10;
            }
            if (pageY + rmHeight > window.innerHeight) {
                pageY -= pageY + rmHeight - window.innerHeight;
            }
            mask = setMask();
            window.onscroll = () => {
                rmf.showRightMenu(false);
                window.onscroll = () => {
                }
                if (document.body.contains(mask)) {
                    document.body.removeChild(mask);
                }
            }

            $(".rightMenu-item").click(() => {
                if (document.body.contains(mask)) {
                    document.body.removeChild(mask);
                }
            });

            $(window).resize(() => {
                rmf.showRightMenu(false);
                if (document.body.contains(mask)) {
                    document.body.removeChild(mask);
                }
            });

            mask.onclick = () => {
                if (document.body.contains(mask)) {
                    document.body.removeChild(mask);
                }
            };

            rmf.showRightMenu(true, pageY, pageX);
            return false;
        };

        window.addEventListener('click', function () {
            rmf.showRightMenu(false);
        });
    }

    if (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
        popupMenu()
    }
    const box = document.documentElement

    function addLongtabListener(target, callback) {
        let timer = 0 // 初始化timer

        target.ontouchstart = () => {
            timer = 0 // 重置timer
            timer = setTimeout(() => {
                callback();
                timer = 0
            }, 380) // 超时器能成功执行，说明是长按
        }

        target.ontouchmove = () => {
            clearTimeout(timer) // 如果来到这里，说明是滑动
            timer = 0
        }

        target.ontouchend = () => { // 到这里如果timer有值，说明此触摸时间不足380ms，是点击
            if (timer) {
                clearTimeout(timer)
            }
        }
    }

    addLongtabListener(box, popupMenu)

# 创建css

创建 `\themes\butterfly\source\css\rightmenu.css`

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /* rightMenu */
    [data-theme='light'] #rightMenu{
        display: none;
        position: fixed;
        width: 160px;
        height: fit-content;
        top: 10%;
        left: 10%;
        background-color: var(--card-bg);
        border: 1px solid rgb(210,210,210);;
        border-radius: 8px;
        z-index: 100;
        box-shadow: 3px 3px 5px #88888894;
        background-color: var(--june-white-acrylic1);
        backdrop-filter: blur(30px);
    }
    [data-theme='dark'] #rightMenu{
        display: none;
        position: fixed;
        width: 160px;
        height: fit-content;
        top: 10%;
        left: 10%;
        background-color: var(--card-bg);
        border: 1px solid rgb(210,210,210);;
        border-radius: 8px;
        z-index: 100;
        box-shadow: 3px 3px 5px #88888894;
        background-color: var(--june-black-acrylic1);
        backdrop-filter: blur(30px);
    }
    #rightMenu .rightMenu-group{
        padding: 7px 6px;
    }
    #rightMenu .rightMenu-group:not(:nth-last-child(1)){
        border-bottom: 1px solid rgb(180,180,180);
    }
    #rightMenu .rightMenu-group.rightMenu-small{
        display: flex;
        justify-content: space-between;
    }
    #rightMenu .rightMenu-group .rightMenu-item{
        height: 30px;
        line-height: 30px;
        border-radius: 8px;
        transition: 0.3s;
        color: var(--font-color);
    }
    #rightMenu .rightMenu-group.rightMenu-line .rightMenu-item{
        display: flex;
        height: 40px;
        line-height: 40px;
        padding: 0 4px;
    }
    #rightMenu .rightMenu-group .rightMenu-item:hover{
        background-color: var(--text-bg-hover);
        box-shadow: 0px 0px 5px var(--june-border);
    }
    #rightMenu .rightMenu-group .rightMenu-item i{
        display: inline-block;
        text-align: center;
        line-height: 30px;
        width: 30px;
        height: 30px;
        padding: 0 5px;
    }
    #rightMenu .rightMenu-group .rightMenu-item span{
        line-height: 30px;
    }
    #rightMenu:hover{
        border: 1px solid var(--june-theme);
    }
    #rightMenu .rightMenu-group.rightMenu-line .rightMenu-item *{
        height: 40px;
        line-height: 40px;
    }
    .rightMenu-group.hide{
        display: none;
    }
    .rightMenu-item:hover{
        color:white!important;
        background-color:var(--june-theme)!important;
    }

# 引入

    1
    2
    - <script type="text/javascript" src="/js/rightmenu.js"></script>
    - <link rel="stylesheet" href="/css/rightmenu.css">

文章作者: biss
文章链接: https://blog.biss.click/posts/8bdb35fb/
版权声明: 本博客所有文章除特别声明外，均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Bi's Blog！
网站
相关推荐
2025-08-12
利用 SiteMap 随机访问站内页面
在网上查找博客美化过程时发现基本上都有“随便逛逛”的功能，于是自己也添加一个。比较简单只有js代码，但是先要安装插件 前置条件1npm install hexo-generator-sitemap --save 在站点配置文件 _config.yaml中添加： 1234567sitemap: path: - sitemap.xml - sitemap.txt rel: false tags: true categories: true 添加js在主题目录下添加·\themes\butterfly\source\js\random.js 12345678910111213function randomPost() { fetch('/sitemap.xml').then(res => res.text()).then(str => (new window.DOMParser()).parseFromString(str, "text/xml")).then(data => {...
2026-01-16
自定义字体
今天感觉网站的字体有些不好看，想换一下，搜索发现网站用woff或者woff2字体，在手机端和电脑都能完美显示 2026年2月3日更新：好像谷歌字体库可以在大陆直连了，速度也很快，所以这篇文章好像没什么必要了。 选择字体首先在网上查找自己喜欢的字体，这里有一个网站 🪧引用站外地址，不保证站点的可用性和安全性 中文开源字体集 Open Source Fonts Collection for Chinese 开源字体 找到一个自己喜欢的，如果有woff或者woff2格式下载下载保存。没有也没关系，转换网站： 🪧引用站外地址，不保证站点的可用性和安全性 转换网站 ttf2woff2 利用这个网站把下载的ttf字体文件转换成woff2格式。 添加字体新建一个css文件 ...
2025-08-10
配置说说页面
又开始折腾啦，这次把说说页面加上，改用moments项目的api 🪧引用站外地址，不保证站点的可用性和安全性 Moments 极简朋友圈 githun@kingwrcy 前期要求硬件要求 一台服务器 一个可自主解析的域名 软件要求 docker环境 反向代理工具（本文以Nginx为例） 介绍与展示这里先给大家展示一下最终的效果，注意该教程可能仅适合部分主题，如果出现主题不适配的情况请自行适配，这里以本站主题 Hexo-theme-butterfly为基础进行修改： 说说页面： ✅来自本站，本站可确保其安全性，请放心点击跳转 我的说说 胡言乱语ing。。。 轻量朋友圈 🪧引用站外地址，不保证站点的可用性和安全性 ...
2025-08-02
部署历程
前提条件在开始之前，请确保你已满足以下条件： 服务器: 安装了 1Panel 面板的 Linux 服务器 拥有服务器的 SSH 访问权限（本文示例将使用 root 用户，你可以根据实际情况替换为其他有权限的用户）。 服务器上已安装 Git。 1Panel 配置: 已通过 1Panel 创建了一个网站（例如 blog.yourdomain.com），并记下该网站的 根目录（Document Root）。通常在 1Panel 中，路径类似于 /opt/1panel/apps/openresty/openresty/www/sites/你的网站目录/index。请务必替换为你的实际路径。本地环境: 你的电脑上已安装并配置好 Hexo 博客环境。 你的电脑上已安装 Git。 已安装 Hexo Git 部署插件： 1npm install hexo-deployer-git --save SSH 密钥认证 (关键): 你需要在本地电脑生成 SSH 密钥对（如果还没有的话）。 必须将你的本地电脑的 SSH 公钥 添加到服务器上对应用户（如 root）的 ~/.ssh...
2025-08-10
在侧边栏中添加欢迎信息
效果展示 开始折腾申请腾讯地图的api key 🪧引用站外地址，不保证站点的可用性和安全性 腾讯地图 Tencent 自行查看文档,要注意在填写信任域名时不填 https:// 添加js在主题 /source/js/目录下添加 txmap.js 有一个更完善的js脚本 🪧引用站外地址，不保证站点的可用性和安全性 txmap.js github 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858...
2025-08-14
自定义页脚（新）
添加CSS修改有风险，注意备份 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196...

评论
biss
文章
34
标签
11
分类
5
Follow Me
公告
系列文章
添加网站左上角菜单 2026-02-10
添加typesense搜索 2026-02-05
自定义字体 2026-01-16
在侧边栏添加日历和倒计时 2026-01-16
使用GitHub推送Hexo到服务器 2025-08-18
自定义页脚（新）2025-08-14
自定义分类条 2025-08-14
自定义导航栏 2025-08-13
利用 SiteMap 随机访问站内页面 2025-08-12
博客添加AI总结 2025-08-12
利用插件自定义页脚菜单 2025-08-12
自定义右键菜单 2025-08-11
在侧边栏中添加欢迎信息 2025-08-10
配置说说页面 2025-08-10
最新文章
opencv基础操作 2026-03-15
配置opencv 2026-03-14
自建bitwarden服务 2026-02-25
自建renovate-bot 2026-02-23
新年快乐！2026-02-14
随便逛逛昼夜切换繁简转换阅读模式隐私声明 Cookie协议版权声明