目前未兼容最新版本,如果版本跟 v3.7.1 有出入的,建议先不要下载文件去替换主题的文件,至于语法可参考下文提到的。新版主题请移步原教程:Akilarの外挂标签引入

更新记录

  1. 更新v3.7.1适配方案
  2. 注意一点的是,butterfly_v3.6.0取消了缓存配置,转为完全默认,需要将{cache:theme.fragment_cache} 改为 { cache:true }
点开查看外挂标签配置教程
  1. 下载资源文件
  2. 将下载的Tag_Plugins.zip解压得到butterfly文件夹。
  3. butterfly文件夹复制到[Blogroot]/node_modules/hexo-theme-butterfly目录下,覆盖当前的butterfly主题文件夹,提示重复则选择替换。(如果担心覆盖自己的其他魔改内容,可以根据静态文件内容自主比对修改)
  4. 修改[Blogroot]/_config.butterfly.ymlinject配置项,添加CDN依赖项。由于issues写入timelinesite-card标签要用到jquery,请务必根据注释指示的版本决定是否添加。
    inject:
    head:
    - <link rel="stylesheet" href="https://fastly.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css" media="defer" onload="this.media='all'"> #动画标签anima的依赖
    bottom:
    - <script defer src="https://fastly.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
    # 自butterfly_v3.4.0+开始,主题基本实现去jquery化,需要自己添加引用,请读者根据版本自行决定是否添加这行引用。
    - <script defer src="https://fastly.jsdelivr.net/npm/hexo-theme-volantis@latest/source/js/issues.min.js"></script>
    #数据集合标签issues的依赖
  5. 外挂标签使用方案请参阅下文。

行内文本样式 text

{% u 文本内容 %}
{% emp 文本内容 %}
{% wavy 文本内容 %}
{% del 文本内容 %}
{% kbd 文本内容 %}
{% psw 文本内容 %}
  1. 下划线 的文本
  2. 着重号 的文本
  3. 波浪线 的文本
  4. 删除线 的文本
  5. 键盘样式的文本 command + D
  6. 密码样式的文本:这里没有验证码
1. 带 {% u 下划线 %} 的文本
2. 带 {% emp 着重号 %} 的文本
3. 带 {% wavy 波浪线 %} 的文本
4. 带 {% del 删除线 %} 的文本
5. 键盘样式的文本 {% kbd command %} + {% kbd D %}
6. 密码样式的文本:{% psw 这里没有验证码 %}

行内文本 span

{% span 样式参数(参数以空格划分), 文本内容 %}
  1. 字体: logo, code
  2. 颜色:red,yellow,green,cyan,blue,gray
  3. 大小: small, h4, h3, h2, h1, large, huge, ultra
  4. 对齐方向: left, center, right
  • 彩色文字
    在一段话中方便插入各种颜色的标签,包括:红色黄色绿色青色蓝色灰色
  • 超大号文字
    文档「开始」页面中的标题部分就是超大号文字。

    A Wonderful Theme for Hexo
- 彩色文字
在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。
- 超大号文字
文档「开始」页面中的标题部分就是超大号文字。
{% span center logo large, Volantis %}
{% span center small, A Wonderful Theme for Hexo %}

段落文本 p

{% p 样式参数(参数以空格划分), 文本内容 %}
  1. 字体: logo, code
  2. 颜色:red,yellow,green,cyan,blue,gray
  3. 大小: small, h4, h3, h2, h1, large, huge, ultra
  4. 对齐方向: left, center, right
  • 彩色文字
    在一段话中方便插入各种颜色的标签,包括:

    红色

    黄色

    绿色

    青色

    蓝色

    灰色

  • 超大号文字
    文档「开始」页面中的标题部分就是超大号文字。

    A Wonderful Theme for Hexo

- 彩色文字
在一段话中方便插入各种颜色的标签,包括:{% p red, 红色 %}、{% p yellow, 黄色 %}、{% p green, 绿色 %}、{% p cyan, 青色 %}、{% p blue, 蓝色 %}、{% p gray, 灰色 %}。
- 超大号文字
文档「开始」页面中的标题部分就是超大号文字。
{% p center logo large, Volantis %}
{% p center small, A Wonderful Theme for Hexo %}

引用 note

以下是butterfly主题的note写法。

修改主题配置文件

note:
# Note tag style values:
# - simple bs-callout old alert style. Default.
# - modern bs-callout new (v2-v3) alert style.
# - flat flat callout style with background, like on Mozilla or StackOverflow.
# - disabled disable all CSS styles import of note tag.
style: simple
icons: false
border_radius: 3
# Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).
# Offset also applied to label tag variables. This option can work with disabled note tag.
light_bg_offset: 0

Note标签外挂有两种用法。iconslight_bg_offset只对方法一生效。

方法一
{% note [class] [no-icon] [style] %}
Any content (support inline tags too.io).
{% endnote %}
方法二
{% note [color] [icon] [style] %}
Any content (support inline tags too.io).
{% endnote %}
方法一
参数用法
class【可选】标识,不同的标识有不同的配色( default / primary / success / info / warning / danger )
no-icon【可选】不显示 icon
style【可选】可以覆盖配置中的 style(simple/modern/flat/disabled)
方法二
参数用法
class【可选】标识,不同的标识有不同的配色( default / primary / success / info / warning / danger )
no-icon【可选】可配置自定义 icon (只支持 fontawesome 图标, 也可以配置 no-icon )
style【可选】可以覆盖配置中的 style(simple/modern/flat/disabled)
方法一
  1. simple样式

    默认 提示块标签

    default 提示块标签

    primary 提示块标签

    success 提示块标签

    info 提示块标签

    warning 提示块标签

    danger 提示块标签

  2. modern样式

    默认 提示块标签

    default 提示块标签

    primary 提示块标签

    success 提示块标签

    info 提示块标签

    warning 提示块标签

    danger 提示块标签

  3. flat样式

    默认 提示块标签

    default 提示块标签

    primary 提示块标签

    success 提示块标签

    info 提示块标签

    warning 提示块标签

    danger 提示块标签

  4. disabled样式

    默认 提示块标签

    default 提示块标签

    primary 提示块标签

    success 提示块标签

    info 提示块标签

    warning 提示块标签

    danger 提示块标签

  5. no-icon样式

    默认 提示块标签

    default 提示块标签

    primary 提示块标签

    success 提示块标签

    info 提示块标签

    warning 提示块标签

    danger 提示块标签

方法二
  1. simple样式

    你是刷 Visa 还是 UnionPay

    2021年快到了….

    小心开车 安全至上

    这是三片呢?还是四片?

    你是刷 Visa 还是 UnionPay

    剪刀石头布

    前端最讨厌的浏览器

  2. modern样式

    你是刷 Visa 还是 UnionPay

    2021年快到了….

    小心开车 安全至上

    这是三片呢?还是四片?

    你是刷 Visa 还是 UnionPay

    剪刀石头布

    前端最讨厌的浏览器

  3. flat样式

    你是刷 Visa 还是 UnionPay

    2021年快到了….

    小心开车 安全至上

    这是三片呢?还是四片?

    你是刷 Visa 还是 UnionPay

    剪刀石头布

    前端最讨厌的浏览器

  4. disabled样式

    你是刷 Visa 还是 UnionPay

    2021年快到了….

    小心开车 安全至上

    这是三片呢?还是四片?

    你是刷 Visa 还是 UnionPay

    剪刀石头布

    前端最讨厌的浏览器

  5. no-icon样式

    你是刷 Visa 还是 UnionPay

    2021年快到了….

    小心开车 安全至上

    这是三片呢?还是四片?

    你是刷 Visa 还是 UnionPay

    剪刀石头布

    前端最讨厌的浏览器

方法一
  1. simple样式
    {% note simple %}默认 提示块标签{% endnote %}

    {% note default simple %}default 提示块标签{% endnote %}

    {% note primary simple %}primary 提示块标签{% endnote %}

    {% note success simple %}success 提示块标签{% endnote %}

    {% note info simple %}info 提示块标签{% endnote %}

    {% note warning simple %}warning 提示块标签{% endnote %}

    {% note danger simple %}danger 提示块标签{% endnote %}
  2. modern样式
    {% note modern %}默认 提示块标签{% endnote %}

    {% note default modern %}default 提示块标签{% endnote %}

    {% note primary modern %}primary 提示块标签{% endnote %}

    {% note success modern %}success 提示块标签{% endnote %}

    {% note info modern %}info 提示块标签{% endnote %}

    {% note warning modern %}warning 提示块标签{% endnote %}

    {% note danger modern %}danger 提示块标签{% endnote %}
  3. flat样式
    {% note flat %}默认 提示块标签{% endnote %}

    {% note default flat %}default 提示块标签{% endnote %}

    {% note primary flat %}primary 提示块标签{% endnote %}

    {% note success flat %}success 提示块标签{% endnote %}

    {% note info flat %}info 提示块标签{% endnote %}

    {% note warning flat %}warning 提示块标签{% endnote %}

    {% note danger flat %}danger 提示块标签{% endnote %}
  4. disabled样式
    {% note disabled %}默认 提示块标签{% endnote %}

    {% note default disabled %}default 提示块标签{% endnote %}

    {% note primary disabled %}primary 提示块标签{% endnote %}

    {% note success disabled %}success 提示块标签{% endnote %}

    {% note info disabled %}info 提示块标签{% endnote %}

    {% note warning disabled %}warning 提示块标签{% endnote %}

    {% note danger disabled %}danger 提示块标签{% endnote %}
  5. no-icon样式
    {% note no-icon %}默认 提示块标签{% endnote %}

    {% note default no-icon %}default 提示块标签{% endnote %}

    {% note primary no-icon %}primary 提示块标签{% endnote %}

    {% note success no-icon %}success 提示块标签{% endnote %}

    {% note info no-icon %}info 提示块标签{% endnote %}

    {% note warning no-icon %}warning 提示块标签{% endnote %}

    {% note danger no-icon %}danger 提示块标签{% endnote %}
方法二
  1. simple样式
    {% note 'fab fa-cc-visa' simple %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note blue 'fas fa-bullhorn' simple %}2021年快到了....{% endnote %}

    {% note pink 'fas fa-car-crash' simple %}小心开车 安全至上{% endnote %}

    {% note red 'fas fa-fan' simple%}这是三片呢?还是四片?{% endnote %}

    {% note orange 'fas fa-battery-half' simple %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note purple 'far fa-hand-scissors' simple %}剪刀石头布{% endnote %}

    {% note green 'fab fa-internet-explorer' simple %}前端最讨厌的浏览器{% endnote %}
  2. modern样式
    {% note 'fab fa-cc-visa' modern %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note blue 'fas fa-bullhorn' modern %}2021年快到了....{% endnote %}

    {% note pink 'fas fa-car-crash' modern %}小心开车 安全至上{% endnote %}

    {% note red 'fas fa-fan' modern%}这是三片呢?还是四片?{% endnote %}

    {% note orange 'fas fa-battery-half' modern %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note purple 'far fa-hand-scissors' modern %}剪刀石头布{% endnote %}

    {% note green 'fab fa-internet-explorer' modern %}前端最讨厌的浏览器{% endnote %}
  3. flat样式
    {% note 'fab fa-cc-visa' flat %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note blue 'fas fa-bullhorn' flat %}2021年快到了....{% endnote %}

    {% note pink 'fas fa-car-crash' flat %}小心开车 安全至上{% endnote %}

    {% note red 'fas fa-fan' flat%}这是三片呢?还是四片?{% endnote %}

    {% note orange 'fas fa-battery-half' flat %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note purple 'far fa-hand-scissors' flat %}剪刀石头布{% endnote %}

    {% note green 'fab fa-internet-explorer' flat %}前端最讨厌的浏览器{% endnote %}
  4. disabled样式
    {% note 'fab fa-cc-visa' disabled %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note blue 'fas fa-bullhorn' disabled %}2021年快到了....{% endnote %}

    {% note pink 'fas fa-car-crash' disabled %}小心开车 安全至上{% endnote %}

    {% note red 'fas fa-fan' disabled %}这是三片呢?还是四片?{% endnote %}

    {% note orange 'fas fa-battery-half' disabled %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note purple 'far fa-hand-scissors' disabled %}剪刀石头布{% endnote %}

    {% note green 'fab fa-internet-explorer' disabled %}前端最讨厌的浏览器{% endnote %}
  5. no-icon样式
    {% note no-icon %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note blue no-icon %}2021年快到了....{% endnote %}

    {% note pink no-icon %}小心开车 安全至上{% endnote %}

    {% note red no-icon %}这是三片呢?还是四片?{% endnote %}

    {% note orange no-icon %}你是刷 Visa 还是 UnionPay{% endnote %}

    {% note purple no-icon %}剪刀石头布{% endnote %}

    {% note green no-icon %}前端最讨厌的浏览器{% endnote %}

上标标签 tip

{% tip [参数,可选] %}文本内容{% endtip %}
  1. 样式: success,error,warning,bolt,ban,home,sync,cogs,key,bell
  2. 自定义图标: 支持fontawesome。

默认情况

success

error

warning

bolt

ban

home

sync

cogs

key

bell

自定义font awesome图标

{% tip %}默认情况{% endtip %}
{% tip success %}success{% endtip %}
{% tip error %}error{% endtip %}
{% tip warning %}warning{% endtip %}
{% tip bolt %}bolt{% endtip %}
{% tip ban %}ban{% endtip %}
{% tip home %}home{% endtip %}
{% tip sync %}sync{% endtip %}
{% tip cogs %}cogs{% endtip %}
{% tip key %}key{% endtip %}
{% tip bell %}bell{% endtip %}
{% tip fa-atom %}自定义font awesome图标{% endtip %}

动态标签 anima

动态标签的实质是引用了font-awesome-animation的css样式,不一定局限于tip标签,也可以是其他标签。只不过这里tip.js是我自己写的,所以我清楚它会怎么被渲染成html,才用的这个写法。可以熟读文档,使用html语言来编写其他标签类型。

{% tip [参数,可选] %}文本内容{% endtip %}

更多详情请参看font-awesome-animation文档

  1. 将所需的CSS类添加到图标(或DOM中的任何元素)。
  2. 对于父级悬停样式,需要给目标元素添加指定CSS类,同时还要给目标元素的父级元素添加CSSfaa-parent animated-hover。(详情见示例及示例源码)You can regulate the speed of the animation by adding the CSS class or . faa-fastfaa-slow
  3. 可以通过给目标元素添加CSSfaa-fastfaa-slow来控制动画快慢。
On DOM load当页面
加载时显示动画
On hover当鼠标
悬停时显示动画
On parent hover当鼠标
悬停在父元素时显示动画
  faa-wrench animated   faa-wrench animated-hover   faa-wrench
  faa-ring animated   faa-ring animated-hover   faa-ring
  faa-horizontal animated   faa-horizontal animated-hover   faa-horizontal
  faa-vertical animated   faa-vertical animated-hover   faa-vertical
  faa-flash animated   faa-flash animated-hover   faa-flas
  faa-bounce animated   faa-bounce animated-hover   faa-bounce
  faa-spin animated   faa-spin animated-hover   faa-spin
  faa-tada animated   faa-tada animated-hover   faa-tada
  faa-shake animated   faa-shake animated-hover   faa-shake
  faa-pulse animated   faa-pulse animated-hover   faa-pulse
  faa-burst animated   faa-burst animated-hover   faa-burst
  faa-falling animated   faa-falling animated-hover   faa-falling
  faa-rising animated   faa-rising animated-hover   faa-rising
  faa-tada animated   faa-tada animated-hover   faa-tada
  faa-passing animated   faa-passing animated-hover   faa-passing
  faa-passing-reverse animated   faa-passing-reverse animated-hover   faa-passing-reverse
  1. On DOM load(当页面加载时显示动画)

    warning

    ban

  2. 调整动画速度

    warning

    ban

  3. On hover(当鼠标悬停时显示动画)

    warning

    ban

  4. On parent hover(当鼠标悬停在父级元素时显示动画)

    warning

    ban

  1. On DOM load(当页面加载时显示动画)
    {% tip warning faa-horizontal animated %}warning{% endtip %}
    {% tip ban faa-flash animated %}ban{% endtip %}
  2. 调整动画速度
    {% tip warning faa-horizontal animated faa-fast %}warning{% endtip %}
    {% tip ban faa-flash animated faa-slow %}ban{% endtip %}
  3. On hover(当鼠标悬停时显示动画)
    {% tip warning faa-horizontal animated-hover %}warning{% endtip %}
    {% tip ban faa-flash animated-hover %}ban{% endtip %}
  4. On parent hover(当鼠标悬停在父级元素时显示动画)
    {% tip warning faa-parent animated-hover %}<p class="faa-horizontal">warning</p>{% endtip %}
    {% tip ban faa-parent animated-hover %}<p class="faa-flash">ban</p>{% endtip %}

复选列表 checkbox

{% checkbox 样式参数(可选), 文本(支持简单md) %}
  1. 样式: plus, minus, times
  2. 颜色:red,yellow,green,cyan,blue,gray
  3. 选中状态: checked

纯文本测试

支持简单的 markdown 语法

支持自定义颜色

绿色 + 默认选中

黄色 + 默认选中

青色 + 默认选中

蓝色 + 默认选中

增加

减少

{% checkbox 纯文本测试 %}
{% checkbox checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}
{% checkbox red, 支持自定义颜色 %}
{% checkbox green checked, 绿色 + 默认选中 %}
{% checkbox yellow checked, 黄色 + 默认选中 %}
{% checkbox cyan checked, 青色 + 默认选中 %}
{% checkbox blue checked, 蓝色 + 默认选中 %}
{% checkbox plus green checked, 增加 %}
{% checkbox minus yellow checked, 减少 %}
{% checkbox times red checked, 叉 %}

单选列表 radio

{% radio 样式参数(可选), 文本(支持简单md) %}
  1. 颜色:red,yellow,green,cyan,blue,gray
  2. 选中状态: checked

纯文本测试

支持简单的 markdown 语法

支持自定义颜色

绿色

黄色

青色

蓝色

{% radio 纯文本测试 %}
{% radio checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}
{% radio red, 支持自定义颜色 %}
{% radio green, 绿色 %}
{% radio yellow, 黄色 %}
{% radio cyan, 青色 %}
{% radio blue, 蓝色 %}

时间轴 timeline

{% timeline 时间线标题(可选) %}
{% timenode 时间节点(标题) %}
正文内容
{% endtimenode %}
{% timenode 时间节点(标题) %}
正文内容
{% endtimenode %}
{% endtimeline %}

2020-07-24 2.6.6 -> 3.0

  1. 如果有 hexo-lazyload-image 插件,需要删除并重新安装最新版本,设置 lazyload.isSPA: true
  2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true 则需要删除。
  3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。
  4. 2.x 版本的置顶 top: true 改为了 pin: true,并且同样适用于 layout: page 的页面。
  5. 如果使用了 hexo-offline 插件,建议卸载,3.0 版本默认开启了 pjax 服务。

2020-05-15 2.6.3 -> 2.6.6

不需要额外处理。

2020-04-20 2.6.2 -> 2.6.3

  1. 全局搜索 seotitle 并替换为 seo_title
  2. group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name
  3. group 组件的列表名优先显示文章的 short_title 其次是 title
{% timeline %}

{% timenode 2020-07-24 [2.6.6 -> 3.0](https://github.com/volantis-x/hexo-theme-volantis/releases) %}

1. 如果有 `hexo-lazyload-image` 插件,需要删除并重新安装最新版本,设置 `lazyload.isSPA: true`
2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 `use_cdn: true` 则需要删除。
3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。
4. 2.x 版本的置顶 `top: true` 改为了 `pin: true`,并且同样适用于 `layout: page` 的页面。
5. 如果使用了 `hexo-offline` 插件,建议卸载,3.0 版本默认开启了 pjax 服务。

{% endtimenode %}

{% timenode 2020-05-15 [2.6.3 -> 2.6.6](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6) %}

不需要额外处理。

{% endtimenode %}

{% timenode 2020-04-20 [2.6.2 -> 2.6.3](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.3) %}

1. 全局搜索 `seotitle` 并替换为 `seo_title`
2. group 组件的索引规则有变,使用 group 组件的文章内,`group: group_name` 对应的组件名必须是 `group_name`
3. group 组件的列表名优先显示文章的 `short_title` 其次是 `title`

{% endtimenode %}

{% endtimeline %}

链接卡片 link

按钮 btns

Volantis的按钮使用的是btnbtns标签。btnsbutterflybutton不冲突,但是btn会被强制渲染,导致部分参数失效,而且btn的效果还是butterflybutton更好看些。所以就只适配了btns

{% btns 样式参数 %}
{% cell 标题, 链接, 图片或者图标 %}
{% cell 标题, 链接, 图片或者图标 %}
{% endbtns %}
  1. 圆角样式:rounded, circle
  2. 增加文字样式:可以在容器内增加 <b>标题</b><p>描述文字</p>
  3. 布局方式:
    默认为自动宽度,适合视野内只有一两个的情况。
参数 含义
wide 宽一点的按钮
fill 填充布局,自动铺满至少一行,多了会换行
center 居中,按钮之间是固定间距
around 居中分散
grid2 等宽最多2列,屏幕变窄会适当减少列数
grid3 等宽最多3列,屏幕变窄会适当减少列数
grid4 等宽最多4列,屏幕变窄会适当减少列数
grid5 等宽最多5列,屏幕变窄会适当减少列数
  1. 如果需要显示类似「团队成员」之类的一组含有头像的链接:
  2. 或者含有图标的按钮:
  3. 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中:
  1. 如果需要显示类似「团队成员」之类的一组含有头像的链接:
    {% btns circle grid5 %}
    {% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2022/05/02/626f92e193879.jpg %}
    {% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2022/05/02/626f92e193879.jpg %}
    {% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2022/05/02/626f92e193879.jpg %}
    {% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2022/05/02/626f92e193879.jpg %}
    {% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2022/05/02/626f92e193879.jpg %}
    {% endbtns %}
  2. 或者含有图标的按钮:
    {% btns rounded grid5 %}
    {% cell 下载源码, /, fas fa-download %}
    {% cell 查看文档, /, fas fa-book-open %}
    {% endbtns %}
  3. 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中:
    {% btns circle center grid5 %}
    <a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1'>
    <i class='fab fa-apple'></i>
    <b>心率管家</b>
    {% p red, 专业版 %}
    <img src='https://bu.dusays.com/2022/05/19/6285336eb791e.png'>
    </a>
    <a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1'>
    <i class='fab fa-apple'></i>
    <b>心率管家</b>
    {% p green, 免费版 %}
    <img src='https://bu.dusays.com/2022/05/19/62853399bd275.png'>
    </a>
    {% endbtns %}

github卡片 ghcard

ghcard使用了github-readme-statsAPI,支持直接使用markdown语法来写。

{% ghcard 用户名, 其它参数(可选) %}
{% ghcard 用户名/仓库, 其它参数(可选) %}

更多参数可以参考:

使用,分割各个参数。写法为:参数名=参数值
以下只写几个常用参数值。
| 参数名 | 取值 | 释义 |
| :———— | :——————————————————————————————————– | :——————————- |
| hide | stars,commits,prs,issues,contribs | 隐藏指定统计 |
| count_private | true | 将私人项目贡献添加到总提交计数中 |
| show_icons | true | 显示图标 |
| theme | 请查阅Available Themes | 主题 |

  1. 用户信息卡片
  2. 仓库信息卡片
  1. 用户信息卡片
    | {% ghcard xaoxuu %}                | {% ghcard xaoxuu, theme=vue %}             |
    | ---------------------------------- | ------------------------------------------ |
    | {% ghcard xaoxuu, theme=buefy %} | {% ghcard xaoxuu, theme=solarized-light %} |
    | {% ghcard xaoxuu, theme=onedark %} | {% ghcard xaoxuu, theme=solarized-dark %} |
    | {% ghcard xaoxuu, theme=algolia %} | {% ghcard xaoxuu, theme=calm %} |
  2. 仓库信息卡片
    | {% ghcard volantis-x/hexo-theme-volantis %}                | {% ghcard volantis-x/hexo-theme-volantis, theme=vue %}             |
    | ---------------------------------------------------------- | ------------------------------------------------------------------ |
    | {% ghcard volantis-x/hexo-theme-volantis, theme=buefy %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-light %} |
    | {% ghcard volantis-x/hexo-theme-volantis, theme=onedark %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-dark %} |
    | {% ghcard volantis-x/hexo-theme-volantis, theme=algolia %} | {% ghcard volantis-x/hexo-theme-volantis, theme=calm %} |

github徽标 ghbdage

关于ghbdage参数的更多具体用法可以参看站内教程:添加github徽标

{% bdage [right],[left],[logo]||[color],[link],[title]||[option] %}
  1. left:徽标左边的信息,必选参数。
  2. right: 徽标右边的信息,必选参数,
  3. logo:徽标图标,图标名称详见simpleicons,可选参数。
  4. color:徽标右边的颜色,可选参数。
  5. link:指向的链接,可选参数。
  6. title:徽标的额外信息,可选参数。主要用于优化 SEO,但 object 标签不会像 a 标签一样在鼠标悬停显示 title 信息。
  7. option:自定义参数,支持shields.io的全部API参数支持,具体参数可以参看上文中的拓展写法示例。形式为 name1=value2&name2=value2

本外挂标签的参数分为三组,用||分割。

  1. 基本参数
  2. 信息参数
  3. 拓展参数

本外挂标签的参数分为三组,用||分割。

  1. 基本参数,定义徽标左右文字和图标
    {% bdage Theme,Butterfly %}
    {% bdage Frame,Hexo,hexo %}
  2. 信息参数,定义徽标右侧内容背景色,指向链接
    {% bdage CDN,JsDelivr,jsDelivr||abcdef,https://metroui.org.ua/index.html,本站使用JsDelivr为静态资源提供CDN加速 %}
    //如果是跨顺序省略可选参数,仍然需要写个逗号,用作分割
    {% bdage Source,GitHub,GitHub||,https://github.com/ %}
  3. 拓展参数,支持shields的API的全部参数内容
    {% bdage Hosted,Vercel,Vercel||brightgreen,https://vercel.com/,本站采用双线部署,默认线路托管于Vercel||style=social&logoWidth=20 %}
    //如果是跨顺序省略可选参数组,仍然需要写双竖线||用作分割
    {% bdage Hosted,Vercel,Vercel||||style=social&logoWidth=20&logoColor=violet %}

网站卡片 sites

{% sitegroup %}
{% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %}
{% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %}
{% endsitegroup %}
{% sitegroup %}
{% site Ethan.Tzy, url=https://fe32.top/, screenshot=https://bu.dusays.com/2022/06/01/6296ceb2e4935.jpg, avatar=https://bu.dusays.com/2022/05/02/626f92e193879.jpg, description=古今之成大事者,不惟有超世之才,亦必有坚忍不拔之志%}
{% site Ethan.Tzy, url=https://fe32.top/, screenshot=https://bu.dusays.com/2022/06/01/6296ceb2e4935.jpg, avatar=https://bu.dusays.com/2022/05/02/626f92e193879.jpg, description=古今之成大事者,不惟有超世之才,亦必有坚忍不拔之志%}
{% site Ethan.Tzy, url=https://fe32.top/, screenshot=https://bu.dusays.com/2022/06/01/6296ceb2e4935.jpg, avatar=https://bu.dusays.com/2022/05/02/626f92e193879.jpg, description=古今之成大事者,不惟有超世之才,亦必有坚忍不拔之志%}
{% site Ethan.Tzy, url=https://fe32.top/, screenshot=https://bu.dusays.com/2022/06/01/6296ceb2e4935.jpg, avatar=https://bu.dusays.com/2022/05/02/626f92e193879.jpg, description=古今之成大事者,不惟有超世之才,亦必有坚忍不拔之志%}
{% endsitegroup %}

行内图片 inlineimage

{% inlineimage 图片链接, height=高度(可选) %}
  1. 高度:height=20px

这是 一段话。

这又是 一段话。

这是 {% inlineimage https://bu.dusays.com/2022/05/19/628532706842d.gif %} 一段话。

这又是 {% inlineimage https://bu.dusays.com/2022/05/19/6285328a83ca7.gif, height=40px %} 一段话。

单张图片 image

{% image 链接, width=宽度(可选), height=高度(可选), alt=描述(可选), bg=占位颜色(可选) %}
  1. 图片宽度高度:width=300px, height=32px
  2. 图片描述:alt=图片描述(butterfly需要在主题配置文件中开启图片描述)
  3. 占位背景色:bg=#f2f2f2
  1. 添加描述:
    愿你成为自己的太阳,无需凭借谁的光芒。
    愿你成为自己的太阳,无需凭借谁的光芒。
  2. 指定宽度:
  3. 指定宽度并添加描述:
    愿你成为自己的太阳,无需凭借谁的光芒。
    愿你成为自己的太阳,无需凭借谁的光芒。
  4. 设置占位背景色:
    优化不同宽度浏览的观感
    优化不同宽度浏览的观感
  1. 添加描述:
    {% image https://bu.dusays.com/2022/05/19/6285306c996c4.jpg, alt=愿你成为自己的太阳,无需凭借谁的光芒。 %}
  2. 指定宽度:
    {% image https://bu.dusays.com/2022/05/19/6285306c996c4.jpg, width=400px %}
  3. 指定宽度并添加描述:
    {% image https://bu.dusays.com/2022/05/19/6285306c996c4.jpg, width=400px, alt=愿你成为自己的太阳,无需凭借谁的光芒。 %}
  4. 设置占位背景色:
    {% image https://bu.dusays.com/2022/05/19/6285306c996c4.jpg, width=400px, bg=#1D0C04, alt=优化不同宽度浏览的观感 %}

音频 audio

{% audio 音频链接 %}
{% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}

视频 video

{% video 视频链接 %}
  1. 对其方向:left, center, right
  2. 列数:逗号后面直接写列数,支持 1 ~ 4 列。
  1. 100%宽度
  2. 50%宽度
  3. 25%宽度
  1. 100%宽度
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
  2. 50%宽度
    {% videos, 2 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% endvideos %}
  3. 25%宽度
    {% videos, 4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% video https://txmov2.a.yximgs.com/upic/2022/11/13/21/BMjAyMjExMTMyMTQxNThfMjk1MTM4ODg1MV84ODY2ODQ2MzE3NV8wXzM=_b_B5980ab28f909cff50f35f4b4b1c8c298.mp4 %}
    {% endvideos %}

相册 gallery

Butterfly自带gallery相册,而且会根据图片大小自动调整排版,效果比Volantisgallery更好,故不再收录Volantisgallery标签。

以下为Butterfly自带的gallery标签写法。相册图库和相册配合使用。

折叠框 folding

{% folding 参数(可选), 标题 %}
![](https://bu.dusays.com/2022/05/19/628533399e7a1.jpg)
{% endfolding %}
  1. 颜色:blue, cyan, green, yellow, red
  2. 状态:状态填写 open 代表默认打开。
查看图片测试

查看默认打开的折叠框

这是一个默认打开的折叠框。

查看代码测试

假装这里有代码块(代码块没法嵌套代码块)

查看列表测试
  • haha
  • hehe
查看嵌套测试
查看嵌套测试2
查看嵌套测试3

hahaha

{% folding 查看图片测试 %}

![](https://bu.dusays.com/2022/05/19/628533399e7a1.jpg)

{% endfolding %}

{% folding cyan open, 查看默认打开的折叠框 %}

这是一个默认打开的折叠框。

{% endfolding %}

{% folding green, 查看代码测试 %}
假装这里有代码块(代码块没法嵌套代码块)
{% endfolding %}

{% folding yellow, 查看列表测试 %}

- haha
- hehe

{% endfolding %}

{% folding red, 查看嵌套测试 %}

{% folding blue, 查看嵌套测试2 %}

{% folding 查看嵌套测试3 %}

hahaha <span><img src='https://bu.dusays.com/2022/05/19/62853244cef33.png' style='height:24px'></span>

{% endfolding %}

{% endfolding %}

{% endfolding %}

分栏 tab

{% tabs Unique name, [index] %}
<!-- tab [Tab caption] [@icon] -->
Any content (support inline tags too).
<!-- endtab -->
{% endtabs %}
  1. Unique name :
    • 选项卡块标签的唯一名称,不带逗号。
    • 将在#id中用作每个标签及其索引号的前缀。
    • 如果名称中包含空格,则对于生成#id,所有空格将由破折号代替。
    • 仅当前帖子/页面的URL必须是唯一的
  2. [index]:
    • 活动选项卡的索引号。
    • 如果未指定,将选择第一个标签(1)。
    • 如果index为-1,则不会选择任何选项卡。
    • 可选参数
  3. [Tab caption]:
    • 当前选项卡的标题。
    • 如果未指定标题,则带有制表符索引后缀的唯一名称将用作制表符的标题。
    • 如果未指定标题,但指定了图标,则标题将为空。
    • 可选参数。
  4. [@icon]:
    • FontAwesome图标名称(全名,看起来像“ fas fa-font”)
    • 可以指定带空格或不带空格;
    • 例如’Tab caption @icon’ 和 ‘Tab caption@icon’.
    • 可选参数。

Demo 1 - 预设选择第一个【默认】

This is Tab 1.

This is Tab 2.

This is Tab 3.

Demo 2 - 预设选择tabs

This is Tab 1.

This is Tab 2.

This is Tab 3.

Demo 3 - 没有预设值

This is Tab 1.

This is Tab 2.

This is Tab 3.

Demo 4 - 自定义Tab名 + 只有icon + icon和Tab名

tab名字为第一个Tab

只有图标 没有Tab名字

名字+icon

Demo 1 - 预设选择第一个【默认】

{% tabs test1 %}
<!-- tab -->
**This is Tab 1.**
<!-- endtab -->

<!-- tab -->
**This is Tab 2.**
<!-- endtab -->

<!-- tab -->
**This is Tab 3.**
<!-- endtab -->
{% endtabs %}

Demo 2 - 预设选择tabs

{% tabs test2, 3 %}
<!-- tab -->
**This is Tab 1.**
<!-- endtab -->

<!-- tab -->
**This is Tab 2.**
<!-- endtab -->

<!-- tab -->
**This is Tab 3.**
<!-- endtab -->
{% endtabs %}

Demo 3 - 没有预设值

{% tabs test3, -1 %}
<!-- tab -->
**This is Tab 1.**
<!-- endtab -->

<!-- tab -->
**This is Tab 2.**
<!-- endtab -->

<!-- tab -->
**This is Tab 3.**
<!-- endtab -->
{% endtabs %}

Demo 4 - 自定义Tab名 + 只有icon + icon和Tab名

{% tabs test4 %}
<!-- tab 第一个Tab -->
**tab名字为第一个Tab**
<!-- endtab -->

<!-- tab @fab fa-apple-pay -->
**只有图标 没有Tab名字**
<!-- endtab -->

<!-- tab 炸弹@fas fa-bomb -->
**名字+icon**
<!-- endtab -->
{% endtabs %}

诗词标签 poem

{% poem [title],[author] %}
诗词内容
{% endpoem %}
  1. title:诗词标题
  2. author:作者,可以不写
水调歌头
苏轼

丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有?把酒问青天。
不知天上宫阙,今夕是何年?
我欲乘风归去,又恐琼楼玉宇,高处不胜寒。
起舞弄清影,何似在人间?

转朱阁,低绮户,照无眠。
不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。

{% poem 水调歌头,苏轼 %}
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。
明月几时有?把酒问青天。
不知天上宫阙,今夕是何年?
我欲乘风归去,又恐琼楼玉宇,高处不胜寒。
起舞弄清影,何似在人间?

转朱阁,低绮户,照无眠。
不应有恨,何事长向别时圆?
人有悲欢离合,月有阴晴圆缺,此事古难全。
但愿人长久,千里共婵娟。
{% endpoem %}

阿里图标 icon

点击查看Hexo引入阿里矢量图标库教程

阿里图标库全名阿里巴巴矢量图标库。提供了丰富的免费图标资源。并且支持多种引入方式。
参考文档:阿里巴巴矢量图标库使用文档
本博文只介绍外挂标签方案,如果需要了解线上引入方案本地引入方案,请移步此博文:传送门

  1. 找到之前新建的图标项目,选择Symbol -> 查看在线链接,获取Symbol.js的在线链接,并引入。以Butterfly主题为例,在[Blogroot]/_config.butterfly.ymlinject配置项中填入:
        inject:
    head:
    bottom:
    + - <script async src="//at.alicdn.com/t/font_2264842_3izu8i5eoc2.js"></script>
    此处async是异步加载属性,能够减少HTML阻塞
  2. 添加外挂标签,在[Blogroot]/node_modules/hexo-theme-butterfly/scripts/tag/目录下新建iconfont.js,打开[Blogroot]/node_modules/hexo-theme-butterfly/scripts/tag/iconfont.js,输入:
    'use strict';

    function iconFont(args) {
    args = args.join(' ').split(',')
    let p0 = args[0]
    let p1 = args[1]?args[1]:1
    return `<svg class="icon" style="width:${p1}em; height:${p1}em" aria-hidden="true"><use xlink:href="#${p0}"></use></svg>`;
    }

    hexo.extend.tag.register('icon',iconFont);
  3. hexo cl && hexo g以后即可使用外挂标签的形式来写入图标了。使用方式:见下面分栏Tab。
{% icon [icon-xxxx],[font-size] %}
  1. icon-xxxx:表示图标font-class,可以在自己的阿里矢量图标库项目的font-class引用方案内查询并复制。
  2. font-size:表示图标大小,直接填写数字即可,单位为em。图标大小默认值为1em
{% icon icon-bianpao %}{% icon icon-chuanghua,2 %}

{% icon icon-hongbao,3 %}{% icon icon-baozhu,4 %}

{% icon icon-lipao,5 %}{% icon icon-shanzi,6 %}

{% icon icon-denglong,1 %}{% icon icon-zhongguojie,2 %}

{% icon icon-tongqian,3 %}{% icon icon-yanhua,4 %}

{% icon icon-fuzi,5 %}{% icon icon-qiqiu,6 %}

{% icon icon-qiandaizi %}{% icon icon-duilian,2 %}

{% icon icon-bingtanghulu,3 %}{% icon icon-liwu,4 %}

{% icon icon-tangguo,5 %}{% icon icon-jiaozi,6 %}

{% icon icon-wanju %}{% icon icon-yuanbao,2 %}

{% icon icon-lipao,3 %}{% icon icon-lipao,4 %}

{% icon icon-denglong,5 %}{% icon icon-tangguo,6 %}

特效标签 wow

点击查看wow.js引入教程
参考方向教程原贴
动画样式依赖animate.css参考文档
wow.js文档

若您不想修改源码,只需使用基础引用方案即可

  1. 新建[Blogroot]/node_modules/hexo-theme-butterfly/source/js/wow_init.js,配置特性动画的默认项。

    wow = new WOW({
    boxClass: 'wow',
    // 当用户滚动时显示隐藏框的类名称
    animateClass: 'animate__animated',
    // 触发 CSS 动画的类名称(动画库默认为"animate.css"库)
    offset: 0,
    // 定义浏览器视口底部与隐藏框顶部之间的距离。
    // 当用户滚动并到达此距离时,将显示隐藏的框。
    mobile: false,
    // 在移动设备上打开/关闭wow.js。
    live: true
    // 在页面上检查新的 wow.js元素。
    })
    wow.init();
  2. 引入jscss样式,修改[Blogroot]/_config.butterfly.ymlinject配置项,添加样式资源。

    inject:
    head:
    - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" media="defer" onload="this.media='all'">
    bottom:
    - <script defer src="https://fastly.jsdelivr.net/gh/graingert/wow@1.3.0/dist/wow.min.js"></script>
    - <script defer data-pjax src="/js/wow_init.js"></script>
  3. 选择需要添加动画的dom元素,添加动画class类。此处提供三种写法。

    • 页面内写法,拟给<div class='example'><div>套上动画。一般在page页面或post页面中使用(也就是写博客的.md文件)。
      <!-- raw的外挂标签是告诉渲染引擎这段代码不用渲染。 -->
      {% raw %}
      <div class="example wow animate__bounceInUp">
      Content to Reveal Here
      </div>
      {% endraw %}
    • pug写法,拟给首页文章卡片套上动画,直接源码修改:修改[Blogroot]/node_modules/hexo-theme-butterfly/layout/includes/mixins/post-ui.pug
          mixin postUI(posts)
      each article , index in page.posts.data
      - .recent-post-item
      + .recent-post-item.wow.animate__zoomIn
      - let link = article.link || article.path
      - let title = article.title || _p('no_title')
    • js批量添加写法(引入顺序需要在wow_init.js之前,而且需要pjax重载,每页重新添加一遍class)。通过在页面按F12,使用控制台右上角的元素选择器找到对应元素并获取class类名。
      修改[Blogroot]/node_modules/hexo-theme-butterfly/source/js/wow_init.js,在原有内容之前添加内容:
      // 给首页文章卡片套上动画
      var arr = document.getElementsByClassName("recent-post-item");
      for(var i = 0;i<arr.length;i++){
      arr[i].classList.add("wow"); //必要项,添加wow.js标记
      arr[i].classList.add("animate__zoomIn"); //必要项,添加样式动画
      }
      // 给侧栏卡片套上动画
      var arr = document.getElementsByClassName("card-widget");
      for(var i = 0;i<arr.length;i++){
      arr[i].classList.add("wow");
      arr[i].classList.add("animate__slideInRight");
      }
      //初始化函数
      wow = new WOW({
      boxClass: 'wow',
      // 当用户滚动时显示隐藏框的类名称
      animateClass: 'animate__animated',
      // 触发 CSS 动画的类名称(动画库默认为"animate.css"库)
      offset: 0,
      // 定义浏览器视口底部与隐藏框顶部之间的距离。
      // 当用户滚动并到达此距离时,将显示隐藏的框。
      mobile: true,
      // 在移动设备上打开/关闭wow.js。
      live: true
      // 在页面上检查新的 wow.js元素。
      })
      wow.init();
  4. 运行hexo cl && hexo g之后即可看到效果。更多动画样式可以查看animate.css参考文档

插件化配置方案是基于Butterfly_v3.4.1编写的,低版本可能有些许不适用,可以考虑使用基础引入方案或者升级主题。或者自己理解后重构配置。

  1. 新建[Blogroot]/node_modules/hexo-theme-butterfly/source/js/wow_init.js 配置默认值
    wow = new WOW({
    boxClass: 'wow',
    // 当用户滚动时显示隐藏框的类名称
    animateClass: 'animate__animated',
    // 触发 CSS 动画的类名称(动画库默认为"animate.css"库)
    offset: 0,
    // 定义浏览器视口底部与隐藏框顶部之间的距离。
    // 当用户滚动并到达此距离时,将显示隐藏的框。
    mobile: false,
    // 在移动设备上打开/关闭wow.js。
    // 经测试此项配置无效。
    live: true
    // 在页面上检查新的 wow.js元素。
    })
    wow.init();
  2. 新建[Blogroot]/node_modules/hexo-theme-butterfly/layout/includes/third-party/wowjs.pug
    .pjax-reload
    if theme.wowjs.animateitem
    each item in theme.wowjs.animateitem
    script(async).
    var arr = document.getElementsByClassName('!{item.class}');
    for(var i = 0;i<arr.length;i++){
    arr[i].classList.add('wow');
    arr[i].classList.add('!{item.style}');
    arr[i].setAttribute('data-wow-duration', '!{item.duration}');
    arr[i].setAttribute('data-wow-delay', '!{item.delay}');
    arr[i].setAttribute('data-wow-offset', '!{item.offset}');
    arr[i].setAttribute('data-wow-iteration', '!{item.iteration}');
    }
    script(defer src=url_for(theme.CDN.wowjs))
    script(defer src=url_for(theme.CDN.wowjs_init))
  3. 修改[Blogroot]/node_modules/hexo-theme-butterfly/layout/includes/head.pug的内容
        //- font
    if theme.blog_title_font && theme.blog_title_font.font_link
    link(rel='stylesheet' href=url_for(theme.blog_title_font.font_link) media="print" onload="this.media='all'")
    + //- animate_css
    + if theme.wowjs.enable
    + link(rel='stylesheet' href=url_for(theme.CDN.animate_css) media="print" onload="this.media='all'")
    //- global config
    !=partial('includes/head/config', {}, {cache:true})
  4. 修改[Blogroot]/node_modules/hexo-theme-butterfly/layout/includes/additional-js.pug的内容
        if theme.pjax.enable
    !=partial('includes/third-party/pjax', {}, {cache:true})

    !=partial('includes/third-party/baidu_push', {}, {cache:true})

    + if theme.wowjs.enable
    + !=partial('includes/third-party/wowjs', {}, {cache:true})
  5. 修改[Blogroot]/node_modules/hexo-theme-butterfly/layout/includes/third-party/pjax.pug的内容

    原则上不推荐再用低于v3.4.0的版本,新版方案已经实现去jquery化,而此处的pjax适配仍然是需要jquery的。

    -   $('script[data-pjax]').each(function () {
    + $('script[data-pjax], .pjax-reload script').each(function () {
    $(this).parent().append($(this).remove())
    })
    -   document.querySelectorAll('script[data-pjax]').forEach(item => {
    + document.querySelectorAll('script[data-pjax], .pjax-reload script').forEach(item => {
    const newScript = document.createElement('script')
    const content = item.text || item.textContent || item.innerHTML || ""
    Array.from(item.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value))
    newScript.appendChild(document.createTextNode(content))
    item.parentNode.replaceChild(newScript, item)
    })
  6. 修改[Blogroot]/_config.butterfly.yml,添加CDN配置项
        CDN:
    main_css: https://fastly.jsdelivr.net/gh/tzy13755126023/tzy13755126023.github.io/css/index.css
    jquery: https://fastly.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js
    main: https://fastly.jsdelivr.net/gh/tzy13755126023/tzy13755126023.github.io@bf_3.4.1_2/js/main.js
    utils: https://fastly.jsdelivr.net/gh/tzy13755126023/tzy13755126023.github.io@bf_3.4.1_2/js/utils.js
    + wowjs: https://fastly.jsdelivr.net/gh/graingert/wow@1.3.0/dist/wow.min.js
    + wowjs_init: /js/wow_init.js # 之后可以自己换成CDN链接
    + animate_css: https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css
  7. 修改[Blogroot]/_config.butterfly.yml,添加wowjs开关配置项,其中classstyle是必填项,其余四个是选填项。此处提供首页文章卡片和侧栏卡片添加动画的示例
    wowjs:
    enable: true #控制动画开关。true是打开,false是关闭
    animateitem:
    - class: recent-post-item #必填项,需要添加动画的元素的class
    style: animate__zoomIn #必填项,需要添加的动画
    duration: 1s #选填项,动画持续时间,单位可以是ms也可以是s。例如3s,700ms。
    delay: 1s #选填项,动画开始的延迟时间,单位可以是ms也可以是s。例如3s,700ms。
    offset: 100 #选填项,开始动画的距离(相对浏览器底部)
    iteration: 1 #选填项,动画重复的次数
    - class: card-widget
    style: animate__zoomIn
  8. 运行hexo cl && hexo g之后即可看到效果。更多动画样式可以查看animate.css参考文档
  1. 外挂标签写法生效的前提是完成了上面的基础引入方案或者插件引入方案(二选一即可)。
  2. 新建[Blogroot]/node_modules/hexo-theme-butterfly/scripts/tag/wowanimate.js:
    'use strict'

    function wow (args, content) {
    args = args.join(' ').split(',')
    let p0 = args[0]?args[0].trim():''
    let p1 = args[1]?args[1].trim():''
    let p2 = args[2]?args[2].trim():''
    let p3 = args[3]?args[3].trim():''
    let p4 = args[4]?args[4].trim():''
    return `<div class='wow ${p0}' data-wow-duration='${p1}' data-wow-delay='${p2}' data-wow-offset='${p3}' data-wow-iteration='${p4}' >${hexo.render.renderSync({ text: content, engine: 'markdown' })}</div>`
    }

    hexo.extend.tag.register('wow',wow,{ ends: true });
  3. 使用方式:见下面分栏Tab。
  1. 如果使用了gulp,在压缩js时可能报错:
    wow_init.js:1 Uncaught ReferenceError: wow is not defined
  2. 修改[Blogroot]/gulpfile.js,添加一行屏蔽项,不要压缩wow_init.js
        //minify js babel
    gulp.task('compress', () =>
    - gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
    + gulp.src(['./public/**/*.js', '!./public/**/*.min.js','!./public/js/wow_init.js'])
    .pipe(babel({
    presets: ['@babel/preset-env']
{% wow [animete],[duration],[delay],[offset],[iteration] %}
  1. animate: 动画样式,效果详见animate.css参考文档
  2. duration: 选填项,动画持续时间,单位可以是ms也可以是s。例如3s700ms
  3. delay: 选填项,动画开始的延迟时间,单位可以是ms也可以是s。例如3s700ms
  4. offset: 选填项,开始动画的距离(相对浏览器底部)。
  5. iteration: 选填项,动画重复的次数。
  1. flip动画效果。

    flip动画效果。

  2. zoomIn动画效果,持续5s,延时5s,离底部100距离时启动,重复10次。

    zoomIn动画效果,持续5s,延时5s,离底部100距离时启动,重复10

  3. slideInRight动画效果,持续5s,延时5s

    slideInRight动画效果,持续5s,延时5s

  4. heartBeat动画效果,延时5s,重复10次。

    heartBeat动画效果,延时5s,重复10次。

  1. flip动画效果。
    {% wow animate__flip %}
    {% note green 'fas fa-fan' modern%}
    `flip`动画效果。
    {% endnote %}
    {% endwow %}
  2. zoomIn动画效果,持续5s,延时5s,离底部100距离时启动,重复10次。
    {% wow animate__zoomIn,5s,5s,100,10 %}
    {% note blue 'fas fa-bullhorn' modern%}
    `zoomIn`动画效果,持续`5s`,延时`5s`,离底部`100`距离时启动,重复`10`次
    {% endnote %}
    {% endwow %}
  3. slideInRight动画效果,持续5s,延时5s
    {% wow animate__slideInRight,5s,5s %}
    {% note orange 'fas fa-car' modern%}
    `slideInRight`动画效果,持续`5s`,延时`5s`。
    {% endnote %}
    {% endwow %}
  4. heartBeat动画效果,延时5s,重复10次。
    {% wow animate__heartBeat,,5s,,10 %}
    {% note red 'fas fa-battery-half' modern%}
    `heartBeat`动画效果,延时`5s`,重复`10`次。
    {% endnote %}
    {% endwow %}