博客魔改教程:一步步改造我的 AnZhiyu 主题

博客魔改教程:一步步改造我的 AnZhiyu 主题
ShiZhongyan🍭博客魔改教程 — 如何魔改我的 AnZhiyu 博客
作者:ShiZhongyan 🍭
简介:本文把我对基于 AnZhiyu 主题的博客做的常用“魔改”整理成一步步的教程,包含视觉(背景、光标)、交互(IP 欢迎、QRCode)与兼容性(PJAX、IPv6 换行)处理。适合有 Hexo/主题基础的读者复现。
免责声明与前置准备
- 修改前请备份主题和 source 目录(git commit 或复制文件夹)。
- 需要基本前端能力(HTML/CSS/JS)和 Hexo 本地调试(hexo s)。
- 本文以主题路径为:d:\程序\blog-demo\themes\anzhiyu;站点源码位于 d:\程序\blog-demo\source。
总览(你会得到什么)
- 白天/夜间两张不同的全站背景图。
- 侧栏公告显示“欢迎信息”,基于访客 IP 显示地区与到站长的距离(腾讯位置 API)。
- IPv6 或超长字符串自动换行,不扰乱卡片布局。
- 在站点底部引入 QRCode 库避免依赖报错。
- 自定义鼠标光标(内点 + 外环 + 点击涟漪),在链接/按钮悬停时有交互反馈。
- PJAX 友好处理,使动态页面切换后交互仍可用。
步骤 1 — 添加日/夜背景图(CSS)
修改文件:source/css/custom.css
关键点:
- 使用 body 进行背景设置,深色模式覆盖使用 [data-theme=”dark”] body。
- 使用合适尺寸图并设置 background-size: cover。
示例 CSS:
1 | /* 在 custom.css 中添加(或替换) */ |
调试:切换主题或系统深色模式,Ctrl+F5 清缓存查看。
步骤 2 — 在公告栏显示欢迎信息(IP 定位)
修改文件:
- source/js/txmap.js(新增或改写)
- themes/anzhiyu/layout/includes/widget/card_announcement.pug(确保存在 #welcome-info 容器)
- _config.anzhiyu.yml(在 inject.bottom 引入 txmap.js,并注意 data-pjax 属性)
要点:
- 使用腾讯 Map 的 IP 定位接口(JSONP)。在成功回调中把结果存到全局(例如 window.ipLoacation)并调用 showWelcome()。
- showWelcome() 读取 ipLoacation,生成 HTML 插入到 #welcome-info;要做好容错检查(ipLoacation 或 DOM 未准备好时返回)。
- 在 pjax:complete 事件中再次调用 showWelcome(),保证页面切换后仍显示。
示例(伪代码):
1 | // 在 txmap.js 成功回调后 |
步骤 3 — IPv6 与超长字符串换行
问题:IPv6 地址太长会溢出侧栏卡片。
解决:
- 在插入 IP 的 HTML 中为 IP span 添加 class=”ip-addr”。
- 在 custom.css 添加换行样式:
1 | .ip-addr { |
说明:anywhere 优先,兼容旧浏览器保留 break-all。
步骤 4 — 引入 QRCode 库,修复依赖错误
错误示例:Uncaught ReferenceError: QRCode is not defined(utils.js 调用前库未加载)
处理:
- 在 _config.anzhiyu.yml 的 inject.bottom 中添加 QRCode 脚本(放在 utils.js 之前):
1 | <script src="https://cdn.jsdelivr.net/npm/qrcodejs@1.0.0/qrcode.min.js"></script> |
- 不要把 QRCode 脚本设为 async(若 utils.js 需要立即使用全局 QRCode)。
步骤 5 — 自定义鼠标光标(cursor.js + CSS)
目标:漂亮的光标(外环 + 内点 + 点击涟漪),悬停/按下有反馈,兼容 PJAX。
修改文件:
- source/js/cursor.js(实现 class Cursor,用 requestAnimationFrame 与 Math.lerp 平滑位移;事件委托识别可交互元素;提供 refresh 方法)
- source/css/custom.css(添加 #cursor、.cursor-dot、.cursor-ring、.cursor-ripple 动画样式)
关键点:
- 使用 document.addEventListener(‘mouseover’, …) 与 target.closest(selector) 来判断 hover(支持动态添加元素)。
- 在 mousedown 时生成一个短时的涟漪 DOM(动画结束后移除),避免频繁修改大量样式。
- small-screen 默认隐藏自定义光标(可选)。
调试:在 DevTools 中查看 #cursor 节点是否存在及样式是否生效。
步骤 6 — PJAX 兼容(非常重要)
要点:
- 把 cursor.js、txmap.js、QRCode 等全局库通过 inject.bottom 首次加载,确保初始页面可用。
- 对于需要在页面切换后重新初始化的逻辑(showWelcome、CURSOR.refresh 等),监听 PJAX 事件并触发对应函数:
1 | document.addEventListener('pjax:complete', () => { |
步骤 7 — 文件清单(核心修改位置)
- source/css/custom.css —— 背景、ip-addr、cursor 样式、#fps 美化等。
- source/js/txmap.js —— 腾讯 IP 定位与 showWelcome 实现。
- source/js/cursor.js —— 自定义光标。
- _config.anzhiyu.yml —— inject.bottom 增加 qrcode、cursor、txmap 引入顺序。
- themes/anzhiyu/layout/includes/widget/card_announcement.pug —— 确保 #welcome-info 存在。
我在仓库中已将这些文件分别实现(如需我把关键代码片段抽出为单独 Gist 或补充截图,我可以继续处理)。
调试与部署建议
- 本地运行:hexo clean && hexo s;在浏览器按 Ctrl+F5 强制刷新静态缓存。
- Console 检查:确保没有 “QRCode is not defined”、”ipLoacation undefined” 等错误。
- 测试 PJAX:在站内多次跳转,观察欢迎信息、光标是否在切换后继续可用。
- 兼容性:IPv6 换行规则在旧浏览器上可能略有差异,测试主流浏览器。
- 回退准备:修改前 git commit,出现问题可快速回退。
结语
本文把我对博客的魔改思路和具体要点总结成可复制的步骤,方便你在自己的 AnZhiyu 主题上复现。若你需要,我可以:
- 把每个修改点生成独立的补丁/PR;
- 提供完整版代码片段文件(cursor.js、txmap.js、custom.css 关键片段);
- 添加截图或演示视频。
祝你魔改愉快 🍭
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果


