Butterfly主题昼夜切换动画美化教程
📌 前言
版本信息:
Butterfly 主题版本:5.5.0
教程更新日期:2025-10-13
本教程将为 Butterfly 主题添加华丽的昼夜切换动画效果
📂 文件修改清单
✅ 新增文件(2个)
themes/butterfly/source/js/sun_moon.js- 动画核心逻辑themes/butterfly/source/css/_layout/sun_moon.styl- 动画样式
✏️ 修改文件(3个)
themes/butterfly/source/css/index.stylthemes/butterfly/layout/includes/additional-js.pugthemes/butterfly/source/js/main.js
🔧 详细实现步骤
步骤一:创建动画 JavaScript 文件
文件路径: themes/butterfly/source/js/sun_moon.js
完整代码:
1 | function updateDarkmodeIcon(mode) { |
步骤二:创建动画样式文件
文件路径: themes/butterfly/source/css/_layout/sun_moon.styl
完整代码:
1 | .Cuteen_DarkSky, |
步骤三:引入样式文件
文件路径: themes/butterfly/source/css/index.styl
原版内容(第1-15行):
1 | if hexo-config('css_prefix') |
修改后(第1-18行):
1 | if hexo-config('css_prefix') |
修改说明: 在文件末尾添加 @import '_layout/sun_moon' 引入动画样式。
步骤四:引入 JavaScript 文件
文件路径: themes/butterfly/layout/includes/additional-js.pug
搜索位置: 约第41-42行,找到 partial("includes/third-party/chat/index") 之后
原版内容:
1 | != partial("includes/third-party/effect", {}, { cache: true }) |
修改后:
1 | != partial("includes/third-party/effect", {}, { cache: true }) |
修改说明:
- 在
chat/index与aplayerInject之间插入代码 - 重要!注意缩进:
if使用 2 个空格,script使用 4 个空格 - Pug 对缩进非常敏感,缩进错误会导致 “Buffered code cannot have a block” 错误
步骤五:修改主题切换逻辑
文件路径: themes/butterfly/source/js/main.js
搜索位置: 约第607行,搜索 darkmode: () => 或 darkmode: 找到函数
原版内容:
1 | darkmode: () => { // switch between light and dark mode |
修改后:
1 | darkmode: () => { // switch between light and dark mode |
修改说明:
- 在函数开头添加
if (typeof switchNightMode === 'function')判断 - 用
if/else包裹原有代码,不改变原有逻辑 - 注意! 如果你的
main.js有handleThemeChange(willChangeMode)这行,请保留 - 函数结尾的
},别忘了
步骤六:添加配置开关
文件路径: _config.butterfly.yml
添加配置项:
1 | # 昼夜切换动画 |
配置说明:
enable: true- 启用昼夜切换动画enable: false- 关闭动画,使用原版切换
🎨 技术亮点
1️⃣ 渐变背景设计
- 白天天空: 从天蓝
#87CEEB渐变到浅蓝#E0F6FF - 夜晚星空: 从深蓝
#0a0e27渐变到紫黑#1e0533 - 使用
linear-gradient实现自然过渡
2️⃣ 太阳/月亮切换
- 太阳渐变: 金黄
#FDB813→ 浅黄#FFFBEA,带光晕box-shadow - 月亮渐变: 白色
#f4f4f4→ 灰色#a8a8a8,带内阴影 - 月球陨石坑: 使用多个
radial-gradient模拟真实纹理
3️⃣ 图标智能切换
- 深色模式: 显示太阳图标
fa-sun(点击回到白天) - 浅色模式: 显示月亮图标
fa-moon(点击进入黑夜) - 页面加载时自动同步图标状态
4️⃣ 性能优化
- 使用
setTimeout控制动画时序 - 动画结束后自动移除 DOM 元素
- 防止重复动画(检查并移除已存在的元素)
- z-index 层级管理(
88888888确保最顶层显示)
🚀 使用方法
1. 安装步骤
1 | # 1. 创建 JS 文件 |
2. 配置说明
1 | # _config.butterfly.yml |
3. 效果测试
- 访问
http://localhost:4000 - 点击右侧昼夜切换按钮
- 观察动画效果:
- 天空渐变
- 太阳/月亮旋转
🎁 扩展建议
自定义颜色
修改 sun_moon.styl 中的渐变色值:
1 | // 白天天空 |
调整动画时长
修改 sun_moon.js 中的 setTimeout 时间:
1 | // 旋转时长(默认 1000ms) |
📝 总结
本教程通过 2 个新增文件 和 3 个简单修改,为 Butterfly 主题添加了华丽的昼夜切换动画。核心技术包括:
- ✅ CSS3 渐变和动画
- ✅ JavaScript DOM 操作
- ✅ 时序控制和状态管理
- ✅ 性能优化和内存管理
动画效果自然流畅,代码结构清晰,易于维护和扩展。适合所有 Butterfly 主题用户使用!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 人生大乱炖!

