博客魔改教程总结(一)
魔改前必看(我当你们都懂了,太细节的就不写在教程中了🤣🤣🤣)
- 博客魔改有风险,如果博客魔改出问题了又没有备份,可通过此项目查看基础源码进行 回滚: jerryc127/hexo-theme-butterfly、 ccknbc-actions/blog-butterfly。
- 这部分魔改基本上都是大佬们造好的轮子,我按照大佬们的轮子结合自己的喜好进行魔改的,具体见我友人帐第一个栏目大佬们的网站,本处仅做一个总结,如有侵权请联系删除。
- 鉴于每个人的根目录名称都不一样,本帖 博客根目录 一律以
[BlogRoot]
指代。 - 本帖涉及魔改源码的内容,会使用 diff代码块 标识,复制时请 不要忘记删除 前面的
+、-
符号。 - 因为
.pug
和.styl
以及.yml
等对缩进要求较为严格,请尽量 不要使用记事本等无法提供语法高亮的文本编辑器 进行修改。 - 本帖基于
Butterfly主题
进行魔改方案编写,因此请读者优先掌握 Butterfly主题官方文档 的内容后再来进行魔改。 - 魔改会过程常常引入 自定义的css与js文件,方法见 Hexo博客添加自定义css和js文件(太懒了不想自己写)
Live2D教程(店长)
点击查看教程
详见: Live2d Widget
效果预览
目前只推荐这个(因为消耗资源较少),这是博客自带的看板娘,这孩子不会说话也不能换装,只会跟着你的鼠标晃动脑袋,不过有几款超可爱。
安装
在Hexo根目录
[BlogRoot]
下打开终端,输入以下指令安装必要插件:1
npm install --save hexo-helper-live2d
打开站点配置文件
[BlogRoot]\config.yml
搜索live2d,按照如下注释内容指示进行操作。
如果没有搜到live2d的配置项,就直接把以下内容复制到最底部。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# Live2D
## https://github.com/EYHN/hexo-helper-live2d
live2d:
enable: true #开关插件版看板娘
scriptFrom: local # 默认
pluginRootPath: live2dw/ # 插件在站点上的根目录(相对路径)
pluginJsPath: lib/ # 脚本文件相对与插件根目录路径
pluginModelPath: assets/ # 模型文件相对与插件根目录路径
# scriptFrom: jsdelivr # jsdelivr CDN
# scriptFrom: unpkg # unpkg CDN
# scriptFrom: https://npm.elemecdn.com/live2d-widget@3.x/lib/L2Dwidget.min.js # 你的自定义 url
tagMode: false # 标签模式, 是否仅替换 live2d tag标签而非插入到所有页面中
debug: false # 调试, 是否在控制台输出日志
model:
use: live2d-widget-model-wanko # npm-module package name
# use: wanko # 博客根目录/live2d_models/ 下的目录名
# use: ./wives/wanko # 相对于博客根目录的路径
# use: https://npm.elemecdn.com/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json # 你的自定义 url
display:
position: right #控制看板娘位置
width: 150 #控制看板娘大小
height: 300 #控制看板娘大小
mobile:
show: true # 手机中是否展示完成后保存修改,在Hexo根目录下运行指令。
1
2
3hexo clean
hexo g
hexo s之所以必须要使用
hexo clean
是因为我们需要清空缓存重新生成静态页面,不然看板娘没被加入生成的静态页面里,是不会出现的。
更换
同样是在Hexo根目录
[BlogRoot]
下,打开终端,选择想要的看板娘进行安装,例如我这里用到的是live2d-widget-model-koharu
,一个Q版小正太。其他的模型也可以在 模型预览 里查看以供选择。输入指令
1
npm install --save live2d-widget-model-koharu
然后在站点配置文件
[BlogRoot]\_config.yml
里找到model
项修改为期望的模型1
2
3model:
use: live2d-widget-model-koharu
# 默认为live2d-widget-model-wanko之后按部就班的运行
1
2
3hexo clean
hexo g
hexo s就能在
localhost:4000
上查看效果了。
卸载看板娘
卸载插件和卸载模型的指令都是通过npm进行操作的。在博客根目录 [BlogRoot]
打开终端,输入:1
2npm uninstall hexo-helper-live2d #卸载看板娘插件
npm uninstall live2d-widget-model-modelname #卸载看板娘模型。记得替换modelname为看板娘名称
卸载后为了保证配置项不出错,记得把 [BlogRoot]\_config.yml
里的配置项给注释或者删除掉。
violet留言板(店长)
点击查看教程
详见: 信笺样式留言板
效果预览
在
[BlogRoot]
运行指令1
npm install --save hexo-helper-live2d
在站点配置文件
_config.yml
或 主题配置文件_config.butterfly.yml
添加以下配置项1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# Live2D
## https://github.com/EYHN/hexo-helper-live2d
live2d:
enable: true #开关插件版看板娘
scriptFrom: local # 默认
pluginRootPath: live2dw/ # 插件在站点上的根目录(相对路径)
pluginJsPath: lib/ # 脚本文件相对与插件根目录路径
pluginModelPath: assets/ # 模型文件相对与插件根目录路径
# scriptFrom: jsdelivr # jsdelivr CDN
# scriptFrom: unpkg # unpkg CDN
# scriptFrom: https://npm.elemecdn.com/live2d-widget@3.x/lib/L2Dwidget.min.js # 你的自定义 url
tagMode: false # 标签模式, 是否仅替换 live2d tag标签而非插入到所有页面中
debug: false # 调试, 是否在控制台输出日志
model:
use: live2d-widget-model-wanko # npm-module package name
# use: wanko # 博客根目录/live2d_models/ 下的目录名
# use: ./wives/wanko # 相对于博客根目录的路径
# use: https://npm.elemecdn.com/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json # 你的自定义 url
display:
position: right #控制看板娘位置
width: 150 #控制看板娘大小
height: 300 #控制看板娘大小
mobile:
show: true # 手机中是否展示
一图流教程
点击查看教程
- 在
[BlogRoot]\source
文件夹下新建一个文件夹css
,该文件夹用于存放自定义的css样式
,再新建一个名为custom.css
,在里面写入以下代码:
1 | /* 页脚与头图透明 */ |
在主题配置文件
[BlogRoot]\_config.butterfly.yml
文件中的inject
配置项的head
子项加入以下代码,代表引入刚刚创建的custom.css
文件(这是相对路径的写法)1
2
3inject:
head:
- <link rel="stylesheet" href="/css/custom.css" media="defer" onload="this.media='all'">在主题配置文件
[BlogRoot]\_config.butterfly.yml
文件中的index_img
和footer_bg
配置项取消头图与页脚图的加载项避免冗余加载1
2
3
4# The banner image of home page
index_img:
# Footer Background
footer_bg: false部分人反映一图流改完了背景图也没了,那大概率是你之前没设置背景图。在主题配置文件
[BlogRoot]\_config.butterfly.yml
文件中的background
配置项设置背景图1
background: url(https://source.fomal.cc/img/home_bg.webp)
页脚Github徽标(店长)
点击查看教程
详见: Add Github Badge
效果预览
安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:1
npm install hexo-butterfly-footer-beautify --save
添加配置信息,以下为写法示例
在站点配置文件 _config.yml
或者主题配置文件 _config.butterfly.yml
中添加(这是我的配置)
1 | # footer_beautify |
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为10,选填 |
enable.timer | true/false | 【必选】计时器控制开关 |
enable.bdage | true/false | 【必选】徽标控制开关 |
enable_page | path | 【可选】填写想要应用的页面,如根目录就填’/‘,分类页面就填’/categories/‘。若要应用于所有页面,就填 all ,默认为 all |
exclude | path | 【可选】填写想要屏蔽的页面,可以多个。仅当enable_page为’all’时生效。写法见示例。原理是将屏蔽项的内容逐个放到当前路径去匹配,若当前路径包含任一屏蔽项,则不会挂载。 |
layout.type | id/class | 【可选】挂载容器类型,填写id或class,不填则默认为id |
layout.name | text | 【必选】挂载容器名称 |
layout.index | 0和正整数 | 【可选】前提是layout.type为class,因为同一页面可能有多个class,此项用来确认究竟排在第几个顺位 |
runtime_js | url | 【必选】页脚计时器脚本,可以下载上文填写示例的链接,参照注释和 教程:Native JS Timer 自行修改。 |
runtime_css | url | 【可选】自定义样式,预留开发者接口,可自行下载。 |
swiperpara | number | 【可选】若非零,则开启轮播功能,此项表示每行最多容纳徽标个数,用来应对徽标过多显得页脚拥挤的问题 |
bdageitem.link | url | 【可选】页脚徽标指向的网站链接 |
bdageitem.shields | url | 【必选】页脚徽标对应的API,API具体写法示例参照 教程Add Github Badge |
bdageitem.message | text | 【可选】页脚徽标悬停时显示的信息 |
swiper_css | url | 【可选】swiper的依赖 |
swiper_js | url | 【可选】swiper的依赖 |
swiperbdage_init_js | url | 【可选】swiper初始化方法 |
首页分类磁贴新版(店长)
点击查看教程
效果预览
- 安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm install hexo-butterfly-categories-card --save |
- 添加配置信息,以下为写法示例
在站点配置文件 _config.yml
或者主题配置文件 _config.butterfly.yml
中添加以下代码,注意要根据他的默认描述排序改为你自己对应的分类名字:
1 | # hexo-butterfly-categories-card |
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为10,选填 |
enable | true/false | 【必选】控制开关 |
enable_page | path/all | 【可选】填写想要应用的页面的相对路径(即路由地址),如根目录就填’/‘,分类页面就填’/categories/‘。若要应用于所有页面,就填’all’,默认为’/‘ |
layout.type | id/class | 【可选】挂载容器类型,填写id或class,不填则默认为id |
layout.name | text | 【必选】挂载容器名称 |
layout.index | 0和正整数 | 【可选】前提是layout.type为class,因为同一页面可能有多个class,此项用来确认究竟排在第几个顺位 |
column | odd/even | 【可选】显示列数,考虑到比例问题,只提供3列和4列,odd为3列, even为4列 |
row | number | 【可选】显示行数,默认两行,超过行数切换为滚动显示 |
message.descr | text | 分类描述,需要和你自己的文章分类一一对应。 |
message.cover | url | 分类背景,需要和你自己的文章分类一一对应。 |
custom_css | url | 【可选】自定义样式,会替换默认的css链接,可以下载文档给出的cdn链接后自主修改 |
首页分类磁贴1.0(小冰)
点击查看教程
效果预览
这个插件主要实现了以下功能:
- 自定义 tags 或 categories 的排列和展示
- 自定义 tags 或 categories 的展示图标,名称
- 自定义排列的行数,默认 2 行
教程:
- 在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm i hexo-magnet --save |
注意,一定要加 --save
,不然本地预览的时候可能不会显示!!!
- 在网站配置文件
_config.yml
新增以下项 (注意不是主题配置文件),这里的分类名字必须和你文章的分类名字一一对应:
1 | magnet: |
配置项的含义:
enable
参数:true/false
含义:是否开启插件
enable_page
参数:/
含义:路由地址,如 / 代表主页。/me/ 代表自我介绍页等等
priority
参数:1
含义:插件的叠放顺序,数字越大,叠放约靠前。
type
参数:categories/tags
含义:选择筛选分类还是标签
devide
参数:2
含义:表示分隔的列数,2 表示分为两列展示
display
参数:
1
2
3- name: 教程 # 这里是tags或者categories的名称
display_name: 小冰の魔改教程 # 这里是替换的名称
icon: 📚 # 这里是展示的图标
含义:配置项,可自行设置,按照设置的顺序展示
color_setting
参数:
1
2
3
4text_color: black # 文字默认颜色
text_hover_color: white # 文字鼠标悬浮颜色
background_color: "#f2f2f2" # 文字背景默认颜色
background_hover_color: "#b30070" # 文字背景悬浮颜色
含义:颜色配置项,可自行设置
layout
参数:type; (class&id)
参数:name;
参数:index;(数字)
含义:如果说 magnet 是一幅画,那么这个 layout 就是指定了哪面墙来挂画
而在 HTML 的是世界里有两种墙分别 type 为 id 和 class。
其中在定义 class 的时候会出现多个 class 的情况,这时就需要使用 index,确定是哪一个。
最后墙的名字即是 name;
1 | <div name="我是墙" id="recent-posts"> |
temple_html
参数:html 模板字段
含义:包含挂载容器
1
2
3
4
5<div class="recent-post-item" style="width:100%;height: auto"> <!--文章容器-->
<div id="catalog_magnet"> <!--挂载容器-->
${temple_html_item}
</div>
</div>plus_style
参数:“”
含义:提供可自定义的 style,如加入黑夜模式。
- 执行 hexo 三连
1 | hexo clean |
- 我们可以看到黑夜模式看起来特别的别扭,因此还要做一下黑夜模式的颜色适配,在
custom.css
文件中添加以下代码适配黑夜模式(具体颜色可以自己调节):
1 | /* 小冰分类分类磁铁黑夜模式适配 */ |
文章置顶滚动栏(店长)
点击查看教程
详见: Swiper Bar
效果预览
- 安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm install hexo-butterfly-swiper --save |
- 添加配置信息,以下为写法示例
在站点配置文件 _config.yml
或者主题配置文件 _config.butterfly.yml
中添加
1 | # hexo-butterfly-swiper |
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为10,选填 |
enable | true/false | 【必选】控制开关 |
enable_page | path/all | 【可选】填写想要应用的页面的相对路径(即路由地址),如根目录就填’/‘,分类页面就填’/categories/‘。若要应用于所有页面,就填’all’,默认为all |
timemode | date/updated | 【可选】时间显示,date为显示创建日期,updated为显示更新日期,默认为date |
layout.type | id/class | 【可选】挂载容器类型,填写id或class,不填则默认为id |
layout.name | text | 【必选】挂载容器名称 |
layout.index | 0和正整数 | 【可选】前提是layout.type为class,因为同一页面可能有多个class,此项用来确认究竟排在第几个顺位 |
default_descr | text | 默认文章描述 |
swiper_css | url | 【可选】自定义的swiper依赖项css链接 |
swiper_js | url | 【可选】自定义的swiper依赖项加js链接 |
custom_css | url | 【可选】适配主题样式补丁 |
custom_js | url | 【可选】swiper初始化方法 |
使用方法:在文章的 front_matter
中添加 swiper_index
配置项即可。
1 | --- |
自定义字体
点击查看教程
声明: 非商免字体 未经授权仅限个人使用,不得用于商业用途!
效果预览
- 准备好字体文件后,在
[BlogRoot]\source\css\custom.css
(没有就自己创建)中添加以下代码:
1 | @font-face { |
各个属性的定义:
font-family属性值中使用webfont来声明使用的是服务器端字体,即设置文本的字体名称。
- src属性值中首先指定了字体文件所在的路径。
- format声明字体文件的格式,可以省略文件格式的声明,单独使用src属性值。
- font-style:设置文本样式。取值:normal:不使用斜体;italic:使用斜体;oblique:使用倾斜体;inherit:从父元素继承。
- 支持格式:*.eot(老版本IE),*.otf,*.ttf,*.woff,*.woff2(推荐)
- 在主题配置文件
_config.butterfly.yml
中的font
配置项以及blog_title_font
配置项写上你刚刚引入的字体名称,系统会根据先后次序从前到后依次加载这些字体:
1 | # Global font settings |
- 重启项目即可看到
1 | hexo cl; hexo s |
文章双侧栏显示(小冰)
点击查看教程
效果预览
- 在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm i hexo-butterfly-article-double-row --save |
- 在网站配置文件
_config.yml
新增以下项 (注意不是主题配置文件):
1 | butterfly_article_double_row: |
- 这时候插件有个bug,就是最后一页文章数目为奇数的时候,会出现这种情况
会显得很不舒服,感谢 唐志远大佬 修复了这个bug,只需要在custom.css
文件添加以下代码即可:
1 | /* 翻页按钮居中 */ |
- 执行 hexo 三连:
1 | hexo clean |
wowjs动画
点击查看教程
详见: Add Blog Animation – Wowjs
效果预览:
效果预览
- 安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm install hexo-butterfly-wowjs --save |
- 添加配置信息,以下为写法示例
在站点配置文件 _config.yml
或者主题配置文件 _config.butterfly.yml
中添加
1 | wowjs: |
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
enable | true/false | 【必选】控制开关 |
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为10,选填 |
mobile | true/false | 控制移动端是否启用,默认移动端禁用 |
animateitem.class | class | 【可选】添加动画类名,只支持给class添加 |
animateitem.style | text | 【可选】动画样式,具体类型参考 animate.css |
animateitem.duration | time,单位为s或ms | 【可选】动画持续时间,单位可以是ms也可以是s。例如3s,700ms。 |
animateitem.delay | time,单位为s或ms | 【可选】动画开始的延迟时间,单位可以是ms也可以是s。例如3s,700ms。 |
animateitem.offset | number,单位为px | 【可选】开始动画的距离(相对浏览器底部)。 |
animateitem.iteration | number,单位为s或ms | 【可选】动画重复的次数 |
animate_css | URL | 【可选】animate.css的CDN链接,默认为 https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/animate.min.css |
wow_js | URL | 【可选】wow.min.js的CDN链接,默认为 https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow.min.js |
wow_init_js | URL | 【可选】wow_init.js的CDN链接,默认为 https://npm.elemecdn.com/hexo-butterfly-wowjs/lib/wow_init.js |
wowjs详细用法见原帖。
GitCalendar(店长)
点击查看教程
详见: Gitcalendar
效果预览
安装
- 安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm install hexo-filter-gitcalendar --save |
- 添加配置信息,以下为写法示例
在站点配置文件 _config.yml
或者主题配置文件如 _config.butterfly.yml
中添加
1 | # hexo-filter-gitcalendar |
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为10,选填 |
enable | true/false | 【必选】控制开关 |
enable_page | path/all | 【可选】填写想要应用的页面的相对路径(即路由地址),如根目录就填’/‘,分类页面就填’/categories/‘。若要应用于所有页面,就填’all’,默认为’/‘ |
layout.type | id/class | 【可选】挂载容器类型,填写id或class,不填则默认为id |
layout.name | text | 【必选】挂载容器名称 |
layout.index | 0和正整数 | 【可选】前提是layout.type为class,因为同一页面可能有多个class,此项用来确认究竟排在第几个顺位 |
user | text | 【必选】git用户名 |
apiurl | url | 【可选】默认使用提供文档提供的api,但还是建议自建api,参考教程: 自建API部署 |
minheight.pc | 280px | 【可选】桌面端最小高度,默认为280px |
minheight.mobile | 0px | 【可选】移动端最小高度,默认为0px |
color | list | 【可选】一个包含11个色值的数组,文档给出了四款预设值 |
container | pug | 【可选】预留的父元素容器,用以适配多主题,需要用pug语法填写,目前已适配 butterfly, volantis, matery, mengd 主题,这四个主题,插件会自自动识别 _config.yml 内填写的 theme 配置项。其余主题需要自己填写父元素容器。 |
gitcalendar_css | URL | 【可选】自定义CSS样式链接 |
gitcalendar_js | URL | 【可选】自定义js链接 |
自定义挂载容器
很多人反映不想挂在首页,想挂在关于或者统计等页面,只需要做2步:
- 在对应页面创建一个DOM让插件有地方挂载,例如演示的就是在关于页面(
/about/
)的文件中直接写入一个div
块
1 | <!-- GitCalendar容器 --> |
- 在对应配置项改为与你容器
id
以创建页面路径相关的(是改不是加!!!)
1 | enable_page: /about/ # 应用页面(记住最后带/) |
- 重启项目就会看见
1 | hexo cl; hexo s |
自建API部署
虽然Vercel的访问应当没有次数限制,但是不排除存在因访问次数过多而限流等限制。所以还是建议各位自建API。使用Vercel部署,完全免费,且无需服务器。
将此项目 fork
到你的Github仓库
- 访问 Vercel官网,点击右上角的sign up进行注册,注册并登录后点击右上角创建一个项目,并选择以Github继续。
此时应该会看到你刚刚
fork
过来的你仓库的项目,看不到就输入关键字进行搜索。点击该仓库右边的
Import
进行导入,Vercel
的PROJECT NAME
可以自定义,不用太过在意,但是之后不支持修改,若要改名,只能删除PROJECT
以后重建一个了,下方三个选项保持默认就好,点击Deploy
进行部署。
- 到此时,
Vercel
的部署已经完成,可以使用Vercel
提供的默认域名来访问api
链接。例如我获取到的默认域名为github-calendar-api.vercel.app
,则用它来替换冰老师教程中的自建API,填写到[BlogRoot]\_config.butterfly.yml
中关于gitcalendar
的apiurl
中。注意源码修改版不要带协议,不要带后缀。就填写给你的默认域名就好。而插件版需要带协议
1 | gitcalendar: |
导航栏魔改
点击查看教程
效果预览
在 [BlogRoot]\source\css\custom.css
中引入如下css代码,然后在主题配置文件 _config.butterfly.yml
中引入该文件:
1 | /* 一级菜单居中 */ |
此处的 css
实现了两个作用:菜单栏居中、子菜单横向显示。其中子菜单横向显示要根据自己的实际情况来改,例如你的以及菜单的第2个选项中有子菜单,那就要加一项调节第2个选项中的子菜单,这个具体调节多少要根据你的具体情况为准,可以自己慢慢调到中间。
此时我们的手机端子菜单默认是展开显示的,如下图所示:
此时我们只需要在主题配置文件 _config.butterfly.yml
中列表对应的地方加一个 hide
即可,如下图的列表选项:
1 | menu: |
此时有人觉得右边搜索按钮露出搜索两个字很丑,我们也可以把它隐藏了,在 [BlogRoot]\themes\Butterfly\layout\includes\header\nav.pug
(npm安装的在 [BlogRoot]\node_moudules\hexo-theme-butterfly\layout\includes\header\nav.pug
)中把以下语句删除或注释掉即可,搜索两个字就不会显示出来(这种语句统一写法是直接删除 +
就可以,不用补空格)。
1 | nav#nav |
黑夜霓虹灯1.0(js计时器实现)
点击查看教程
效果预览
此教程会有两处地方有霓虹灯效果:一个是大标题和个人信息的动态霓虹灯,默认周期为1200ms;另外的是菜单栏的小字有夜光效果,为你的博客增添几分赛博朋克风~
- 首先在自定义的样式文件
[BlogRoot]\source\css\custom.css
中引入以下代码,变量部分var(--theme-color)
可以换为自己喜欢的颜色,例如紫色rgb(179, 71, 241)
,后面的颜色连续渐变效果根据个人喜好选择,有的人喜欢连续的,有的人喜欢断续的
1 | /* 夜间模式菜单栏发光字 */ |
- 新建文件
[BlogRoot]\source\js\light.js
并写入以下代码,本质就是计时器,大家可以根据自己的喜好调节闪烁周期,默认为1200ms
:
1 | // 霓虹灯效果 |
- 在主题配置文件
_config.butterfly.yml
引入以上两个文件,要注意的是,js文件这里必须为defer
,不能为ansyc
,保证脚本会延迟到整个页面都解析完后再执行,此时才有对应的元素进行操作:
1 | inject: |
- 重启项目即可看到效果
1 | hexo cl; hexo s |
黑夜霓虹灯2.0(纯CSS实现)
点击查看教程
用js计时器实现的霓虹灯性能比较低,于是弄了一个纯css关键帧实现,推荐都用这个,实测性能高挺多,Pjax适配也比较友好。
- 在自定义的
custom.css
中添加如下代码,实现的原理就是关键帧线性插值,然后一直循环,这里默认是左上角标题、中间标题和副标题,还有文章页头的标题和信息有循环霓虹灯,菜单的文字实现起来要改一下源码,个人觉得没必要了,这样就够了,多了反而花里胡哨:
1 | /* 日间模式不生效 */ |
- 刷新页面即可看到效果,默认是夜间模式才开启的,因为白天模式开启霓虹灯会显得很奇怪
星空背景和流星特效
点击查看教程
效果预览
- 在
[BlogRoot]/source/js
目录下新建universe.js
,输入以下代码:
1 | function dark() {window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;var n,e,i,h,t=.05,s=document.getElementById("universe"),o=!0,a="180,184,240",r="226,225,142",d="226,225,224",c=[];function f(){n=window.innerWidth,e=window.innerHeight,i=.216*n,s.setAttribute("width",n),s.setAttribute("height",e)}function u(){h.clearRect(0,0,n,e);for(var t=c.length,i=0;i<t;i++){var s=c[i];s.move(),s.fadeIn(),s.fadeOut(),s.draw()}}function y(){this.reset=function(){this.giant=m(3),this.comet=!this.giant&&!o&&m(10),this.x=l(0,n-10),this.y=l(0,e),this.r=l(1.1,2.6),this.dx=l(t,6*t)+(this.comet+1-1)*t*l(50,120)+2*t,this.dy=-l(t,6*t)-(this.comet+1-1)*t*l(50,120),this.fadingOut=null,this.fadingIn=!0,this.opacity=0,this.opacityTresh=l(.2,1-.4*(this.comet+1-1)),this.do=l(5e-4,.002)+.001*(this.comet+1-1)},this.fadeIn=function(){this.fadingIn&&(this.fadingIn=!(this.opacity>this.opacityTresh),this.opacity+=this.do)},this.fadeOut=function(){this.fadingOut&&(this.fadingOut=!(this.opacity<0),this.opacity-=this.do/2,(this.x>n||this.y<0)&&(this.fadingOut=!1,this.reset()))},this.draw=function(){if(h.beginPath(),this.giant)h.fillStyle="rgba("+a+","+this.opacity+")",h.arc(this.x,this.y,2,0,2*Math.PI,!1);else if(this.comet){h.fillStyle="rgba("+d+","+this.opacity+")",h.arc(this.x,this.y,1.5,0,2*Math.PI,!1);for(var t=0;t<30;t++)h.fillStyle="rgba("+d+","+(this.opacity-this.opacity/20*t)+")",h.rect(this.x-this.dx/4*t,this.y-this.dy/4*t-2,2,2),h.fill()}else h.fillStyle="rgba("+r+","+this.opacity+")",h.rect(this.x,this.y,this.r,this.r);h.closePath(),h.fill()},this.move=function(){this.x+=this.dx,this.y+=this.dy,!1===this.fadingOut&&this.reset(),(this.x>n-n/4||this.y<0)&&(this.fadingOut=!0)},setTimeout(function(){o=!1},50)}function m(t){return Math.floor(1e3*Math.random())+1<10*t}function l(t,i){return Math.random()*(i-t)+t}f(),window.addEventListener("resize",f,!1),function(){h=s.getContext("2d");for(var t=0;t<i;t++)c[t]=new y,c[t].reset();u()}(),function t(){document.getElementsByTagName('html')[0].getAttribute('data-theme')=='dark'&&u(),window.requestAnimationFrame(t)}()}; |
- 在
[BlogRoot]/source/css
目录下新建universe.css
,输入以下代码:
1 | /* 背景宇宙星光 */ |
- 在主题配置文件
_config.butterfly.yml
的inject
配置项中bottom
下填入:
1 | inject: |
- 在主题配置文件
_config.butterfly.yml
的inject
配置项中head
下填入:
1 | inject: |
- 重新编译即可看到效果。
侧边栏电子时钟(安知鱼)
点击查看教程
效果预览
安装
- 如果有安装店长的插件版侧边栏电子钟(与店长的电子钟冲突),在博客根目录
[BlogRoot]
下打开终端,运行以下指令
1 | # 卸载原版电子钟 |
- 安装插件,在博客根目录
[BlogRoot]
下打开终端,运行以下指令:
1 | npm install hexo-butterfly-clock-anzhiyu --save |
- 添加配置信息,以下为写法示例
在主题配置文件 _config.butterfly.yml
(注意一定要主题配置文件)中添加:
1 | # electric_clock (安知鱼电子钟) |
其中qweather_key 和gaud_map_key 最好自己去申请对应的 api key,默认使用 鱼
的,可能会被限制,不保证可靠性。
- 参数释义
参数 | 备选值/类型 | 释义 |
---|---|---|
priority | number | 【可选】过滤器优先级,数值越小,执行越早,默认为 10,选填 |
enable | true/false | 【必选】控制开关 |
enable_page | path/all | 【可选】填写想要应用的页面的相对路径(即路由地址),如根目录就填’/‘,分类页面就填’/categories/‘。若要应用于所有页面,就填’all’,默认为 all |
exclude | path | 【可选】填写想要屏蔽的页面,可以多个。写法见示例。原理是将屏蔽项的内容逐个放到当前路径去匹配,若当前路径包含任一屏蔽项,则不会挂载。 |
layout.type | id/class | 【可选】挂载容器类型,填写 id 或 class,不填则默认为 id |
layout.name | text | 【必选】挂载容器名称 |
layout.index | 0和正整数 | 【可选】前提是 layout.type 为 class,因为同一页面可能有多个 class,此项用来确认究竟排在第几个顺位 |
loading | URL | 【可选】电子钟加载动画的图片 |
clock_css | URL | 【可选】电子钟样式 CDN 资源 |
clock_js | URL | 【可选】电子钟执行脚本 CDN 资源 |
ip_api | URL | 【可选】获取时钟 IP 的 API |
qweather_key | text | 【可选】和风天气 key |
gaud_map_key | text | 【可选】高得地图 web 服务 key |
default_rectangle | text | 【可选】开启后将一直显示 rectangle 位置的天气,否则将获取访问者的地理位置与天气 |
rectangle | text | 【可选】获取访问者位置失败时会显示该位置的天气,同时该位置为开启 default_rectangle 后的位置 |
API申请教程
一、 qweather_key
申请地址: https://id.qweather.com/#/login
二、 gaud_map_key
申请地址: https://lbs.amap.com/
登录后进入控制台
创建应用,名称随意,类型选其他
个人卡片渐变色
点击查看教程
效果预览
在 [BlogRoot]\source\css\custom.css
自定义样式的文件中引入如下代码(最后记得在 inject
配置项引入!!!):
1 | /* 侧边栏个人信息卡片动态渐变色 */ |
🍕🍕🍕写在最后
- 大家有啥教程想看的可以在评论区留言
提示🍒
(。・∀・)ノ゙由于网站部分设置项更新,当前已为您重置所有设置,祝您愉快!