Butterfly 电子时钟侧边栏小部件 3.0
教程:基于 Butterfly 主题的模拟电子钟侧边栏小部件 3.0 版
原文链接:https://zfe.space/post/56348.html
作者:小冰博客(しゅふがく)
序言
效果展示
3.0 模拟时钟小部件主要包含:
- 日期(年、月、日、星期)
- 天气(天气图标、温度)
- 湿度(百分比)
- 空气质量(US AQI)
- 时间(当地时间、AM/PM)
- 地理位置(IP 地址地理位置)
- 每日访问上限:约 500 次
- 每月访问上限:10000 次
预览地址:https://zfe.space
调用过猛可能会导致超出访问限制而不显示。
相比 1.0 版本,加快了访问速度并优化了加载效果。
相比 2.0 版本,通过 Vue 替换 jQuery 的 DOM 操作提升了性能。
解决了 date class 会导致相关文章的时间样式出错的 BUG。
资源包地址
- 基础 3.0 版本:https://github.com/Zfour/Butterfly-clock/releases/tag/3.01
- 内测 3.1 版本:https://github.com/Zfour/Butterfly-clock/
内测 3.1 版本
3.1 内测版主要包含:
- 日期(年、月、日、星期)
- 天气(天气图标、温度)
- 时间(当地时间、AM/PM)
- 地理位置(相比 3.0 优化了 IP 信息定位不准确问题)
- IP 信息(替代了空气质量信息)
- 每日访问上限:无限次
- 相比 3.0 优化了加载动画和信息显示效果
步骤 1:申请 API Key
基础 3.0 版本
这里介绍如何申请 AirVisual API Key。
- 打开网站注册账号:https://www.iqair.com/auth/login
- 登录后访问:https://www.iqair.com/dashboard/api
- 点击 “+ NEW KEY” 按钮,选择 “Community” 得到对应的 Key
内测 3.1 版本
- 打开网站注册账号:https://openweathermap.org,验证邮箱
- 打开 https://home.openweathermap.org/api_keys 得到对应的 Key
步骤 2:添加小部件 PUG
- 将资源包中
pug文件夹的card_clock.pug文件放入themes/butterfly/layout/includes/widget目录下 - 将资源包中
pug文件夹的index.pug文件放入同目录替换(适用于 Butterfly 3.3 以上版本)
若你的版本较低或存在侧边栏魔改,请打开 themes/butterfly/layout/includes/widget/index.pug,将以下代码添加至 card_author 代码块后:
1 | if theme.aside.card_clock.enable |
添加后的完整示例:
1 | #aside_content.aside_content |
打开 themes/butterfly/_config.yml,搜索 aside: 设置处,添加 clock 开关:
1 | aside: |
步骤 3:导入 CSS、JS、图片等资源文件
将下载包中的 clock 文件夹放入博客根目录的 source 文件夹下。
注意:如果报错,请将文件夹中的
pug文件夹删除!
基础 3.0 版本
打开 clock/clock.js,找到这行:
1 | let clockurl = "https://api.airvisual.com/v2/nearest_city?key=88888888-8888-8888-8888-888888888888"; |
将 key 值改为你在 AirVisual 官网申请的 Key。
内测 3.1 版本
打开 clock/clock.js,找到这行:
1 | const mykey = { weather: "888888888888888888888" }; |
将 key 值改为你在 openweathermap.org 官网申请的 Key。
步骤 4:接入 CSS 与 JS
打开 themes/butterfly/_config.yml,搜索 inject: 设置处,添加:
1 | inject: |
Butterfly 3.4 以上版本请引入 jQuery:
1 | inject: |
总结
在本地进行开发时,基础版建议关闭 card_clock: enable: true 选项,以免多次调用超出访问上限。
3.1 内测版无访问次数限制。
相关评论常见问题
Q: 开启 Pjax 后控制台报错 Identifier 'mykey' has already been declared
原因:const 声明的变量会重复声明。
解决方法:
- 在另外的 JS 中单独使用
const声明mykey且不添加data-pjax - 将
const改成let或var
Q: 开启 Pjax 不能加载,只有强制刷新才能显示
原因:Pjax 切换页面后脚本没有重新执行。
解决方法:给 script 标签加上 data-pjax 属性。
