入门Hexo
由于平时自己喜欢看一些技术类文章整理成Word笔记,总感觉这种方式太low,想自己搭建属于自己的博客,在网上查阅了一下,发现Hexo在GitHub或者是码云上搭建博客非常给力。
然后自己也搭建了博客,这篇文章就记录了搭建的过程及一些优化。
什么是Hexo
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown (或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。大家进入 Hexo官网 进行查看。
安装Hexo
安装 Hexo 相当简单。然而在安装前,您必须检查电脑中是否已安装下列应用程序:
1  | $ npm install -g hexo-cli  | 
检查是否安装Hexo完成,查询是否成功,显示hexo-cli 版本就说明成功了
1  | $ hexo -V  | 
建站
安装一切所需的程序后,就可以开始建站了,就是创建我们的博客,大家也可以进入 建站官网 查看。
新建一个文件夹,来管理我们的博客项目,执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
运行命令
1  | $ hexo init <folder>  | 
注:<folder>是表示建站的博客项目名
打开Git Bash here,输入:
1  | $ hexo init githubBlog  | 
进入创建的博客项目下,安装
1  | $ cd githubBlog  | 
安装之后,整个博客项目目录如下:
访问URL
1  | $ hexo server  | 
访问URL:http://localhost:4000,效果如下图:
到这里已经通过Hexo初步创建博客了,下面再来了解一下如何将我们的博客托管到GitHub服务器上。
托管到GitHub
GitHub创建repositories
进入GitHub官网中浏览器输入 https://github.com/ ,如果还没有账号就创建一个账号就好了。登录自己的账号。直接new repositories 或者进入You repositories 在new repositories。
进入到创建 repositories 页面后,一定要注意,将新建的repository的名字为: You account name.github.io。其他默认就好了。
配置
GitHub的Repository创建好后,在回到本地的Hexo的githubBlog项目中,找到在项目的根目录下_config.yml找到 deploy标签
在该文件下面添加
注:repository: https://github.com/whb1990/whb1990.github.io 是自己刚刚创建You account name.github.io 的repository,在Clone with HTTPS里面,复制粘贴就好了,冒号后面记得空格。branch 后面是master就好了。
1  | deploy: #部署  | 
在_config.yml找到url进行修改为:
1  | url: http://whb1990.github.io #博客网址  | 
部署
到这里就差不到了,接下来需要执行一些命令,将博客部署到GitHub上去。
打开Git Bash Here进入githubBlog 根目录下,首先需要安装一下 hexo-deployer-git 不然可能出现错误无法部署成功。
1  | $ cnpm install hexo-deployer-git --save  | 
然后在执行以下命令:
1  | $ hexo clean  | 
或者简写
1  | $ hexo clean  | 
部署成功如下显示:
测试
我们进行访问 https://whb1990.github.io/ 和 http://localhost:4000/ 一样的页面说明是已经成功。
站点文件配置
在根githubBlog目录下_config.yml文件,我们暂且称为站点配置文件,以便与后面讲到的主题配置文件(Next主题下的_config.yml文件)进行区分。
网站
| 参数 | 描述 | 
|---|---|
title | 
网站标题 | 
subtitle | 
网站副标题 | 
description | 
网站描述 | 
author | 
您的名字 | 
language | 
网站使用的语言 | 
timezone | 
网站时区。Hexo 默认使用您电脑的时区。时区列表。比如说:America/New_York, Japan, 和 UTC 。 | 
目录
| 参数 | 描述 | 
|---|---|
source_dir | 
资源文件夹,这个文件夹用来存放内容。 | 
public_dir | 
公共文件夹,这个文件夹用于存放生成的站点文件。 | 
tag_dir | 
标签文件夹 | 
archive_dir | 
归档文件夹 | 
category_dir | 
分类文件夹 | 
code_dir | 
Include code 文件夹 | 
i18n_dir | 
国际化(i18n)文件夹 | 
skip_render | 
跳过指定文件的渲染,您可使用 glob 来配置路径 | 
文章
| 参数 | 描述 | 默认值 | 
|---|---|---|
new_post_name | 
新文章的文件名称 | :title.md | 
default_layout | 
预设布局 | post | 
auto_spacing | 
在中文和英文之间加入空格 | false | 
titlecase | 
把标题转换为 title case | false | 
external_link | 
在新标签中打开链接 | true | 
filename_case | 
把文件名称转换为 (1) 小写或 (2) 大写 | 0 | 
render_drafts | 
显示草稿 | false | 
post_asset_folder | 
启动 Asset 文件夹 | false | 
relative_link | 
把链接改为与根目录的相对位址 | false | 
future | 
显示未来的文章 | true | 
highlight | 
代码块的设置 | 
分类&标签
| 参数 | 描述 | 默认值 | 
|---|---|---|
default_category | 
默认分类 | uncategorized | 
category_map | 
分类别名 | |
tag_map | 
标签别名 | 
分页
| 参数 | 描述 | 默认值 | 
|---|---|---|
per_page | 
每页显示的文章量 (0 = 关闭分页功能) | 10 | 
pagination_dir | 
分页目录 | page | 
写作
创建文章
1  | $ hexo new [layout] <title>  | 
如:创建hello-world
1  | $ hexo new hello-world  | 
如果不添加title,默认就是标题title: hello-world。
这里注意一下,如果创建带有中文的路径名称时,生成静态页面hexo g可能会报错。
1  | warning: LF will be replaced by CRLF in xxxx  | 
这是由于原因是路径中存在 / 的符号转义问题 如:创建文章时命名为中文,一般都出现这个小问题。
解决
在命令行中输入:
1  | $ git config --global core.autocrlf false  | 
然后重新生成文件部署就好了。
编辑文章
创建的文章在source/_posts目录下,打开文件进行编辑,完全支持Markdown语法。
Next主题
在 Hexo主题官网 中有许多主题,大家喜欢什么就进行部署和编辑就好了,大致的思路都是差不多的。
我选择的 Next主题 ,网上很多也是用的这个主题。
安装
在githubBlog根目录下,执行以下命令:
1  | $ git clone https://github.com/theme-next/hexo-theme-next themes/next  | 
上面的命令是clone最新版本的主题,也可以使用下面的命令clone指定版本的主题
1  | $ git clone --branch v7.1.1 https://github.com/theme-next/hexo-theme-next themes/next  | 
安装完成之后,在themes下就会有next目录
切换主题
在项目根目录下打开_config.yml文件将theme设置为next即可:
部署之后查看效果如下,有点丑:
主题配置
一般配置都在theme/next/-config.yml文件下配置。
- 修改整体布局
 
在theme/next/-config.yml找到menu看看自己博客所需的分类
1  | menu:  | 
在menu_settings如果设置icon: false则无图标,badges: true则标签都会显示数字
1  | menu_settings:  | 
注:这里需要创建about页面,很简单,同理创建标签tags、归档archives页面一样的方式,所需要创建的名称要与menu相对应,举例说明如下。
1  | $ hexo new page about #看看menu上还有什么标签没创建就行创建  | 
创建完成之后在自己项目查找,如我的是githubBlog/source/目录下查看新创建好的相关标签页面,里面包含各自的index.md文件,大家可以自行编辑了。
- Schemes方案设置
 
1  | # Schemes  | 
自己喜欢什么风格自行选择。
- social设置
 
使用方式: Key: permalink || icon Key表示标签显示,permalink表示URI连接,icon表示图标,自己添加所要显示的,
1  | social:  | 
注:图标库来源 [https://fontawesome.com/icons?from=io] ,在scheme: Pisces该效果不显示。
- avatar头像设置
 
1  | avatar:  | 
- toc边栏中的目录设置
 
1  | toc: #边栏设置  | 
- Creative Commons 4.0国际许可设置
 
1  | # Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero  | 
- sidebar侧边栏配置这里选择默认吧
 
1  | sidebar:  | 
- save_scroll配置
 
1  | # Automatically saving scroll position on each post / page in cookies.  | 
- excerpt_description
 
1  | # Automatically excerpt description in homepage as preamble text.  | 
- auto_excerpt配置
 
1  | auto_excerpt:  | 
- codeblock代码块配置
 
1  | codeblock:  | 
- wechat_subscriber微信配置
 
1  | wechat_subscriber:  | 
- footer 底部设置
 
1  | footer:  | 
- favicon标签页图标
 
1  | favicon:  | 
- Math Equations Render Support 数学方程式渲染支持
 
1  | math:  | 
16 .Han Support 支持汉字
设置汉字支持,按照以下步骤:
- 打开Git Bash Here,进入theme/next目录下
 
1  | $ cd themes/next  | 
- 获取该汉字支持Git module,执行命令以下命令获得
 
1  | $ git clone https://github.com/theme-next/theme-next-han source/lib/Han  | 
- 设置汉字支持
 
1  | han: true  | 
- 更新update
 
1  | $ cd themes/next/source/lib/Han  | 
- font字体设置
 
1  | font:  | 
添加图标链接到GitHub
一般在右上角或者左上角,如配置右上角Fork_me_on_GitHub,按以下步骤进行
打开 Fork_me_on_GitHub 链接,里面有许多样式,选择自己喜欢的样式,将其复制下来。
打开自己博客项目中的
themes/next/layout/_layout.swig文件,搜索<div class="headband"></div>将复制的内容粘贴到<div class="headband"></div>下面,如下:
配置右上角的Fork_me_on_GitHub:
修改文章底部标签
在博客项目中找到/themes/next/layout/_macro/post.swig,搜索 rel="tag",将 #号 换成<i class="fa fa-tag"></i>
原先#号的样式
修改为图标的样式
设置背景动画样式
NexT里面有几种动画背景样式canvas_nest、three_waves、canvas_lines、canvas_sphere等
- canvas_nest如下图所示:
 
按照以下步骤完成
- 打开
Git Bash Here进入自己文件夹下/themes/next文件夹下 
1  | $ cd /themes/next  | 
- 下载安装 
canvas_nest module执行 
1  | $ git clone https://github.com/theme-next/theme-next-canvas-nest source/lib/canvas-nest  | 
在 /themes/next/source/lib查看会看到canvas_nest文件夹
- 在
/themes/next/_config.yml设置 
1  | canvas_nest: true  | 
- three_waves如图所示
 
three_waves 设置步骤,和 canvas_nest 步骤是一样的。
下载完成后,在/themes/next/_config.yml设置
1  | three_waves: true  | 
- canvas_ribbon
 
canvas_ribbon只适合 scheme Pisces 这里不测试了,大家可以进入 canvas_ribbon 安装。
在网站底部添加访问量
- 进入
 \themes\next\layout\_partials\footer.swig文件顶部第一行添加
1  | <script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>  | 
- 搜索
 
1  | {% if theme.footer.powered.enable %}  | 
在这个位置上添加以下代码:
1  | <div class="powered-by">  | 
注:这里的id值可以选择两种
1  | busuanzi_value_site_uv #表示用户连续点击n篇文章,只记录1次访客数  | 
这里对应的是2上的id值
给每篇文章添加类别和标签
在创建的文章都在source/_post目录下找到,每篇文章添加tags、categories
添加进度条
添加进度条的话在手机浏览的时候一般情况都有自带的进度条了,例如微信浏览、浏览器浏览等等,这样就出现重复的进度条了,这里看个人是否添加。但是在电脑浏览器浏览却是不错的。
本例设置的如下pace-theme-center-circle显示
按照以下步骤进行或者进入这里 Progress配置 查看如何配置
- 打开Git Bash Here进入自己文件夹下
/themes/next文件夹下 
1  | $ cd /themes/next  | 
- 下载安装 Progress module 执行
 
1  | $ git clone https://github.com/theme-next/theme-next-pace source/lib/pace  | 
在 /themes/next/source/lib查看会看到pace文件夹
- 在
/themes/next/_config.yml设置 
1  | pace:  | 
添加站内搜索
由于可能需要快速查找相关文章,那么就需要添加站内搜索。
按以下步骤进行或者进入 NexT配置站内搜索 文档查看如何配置
- 安装站内搜索插件
 
1  | $ npm install hexo-generator-searchdb --save  | 
- 在根目录下的
_config.yml添加 
1  | #表示站内搜索  | 
- 在
themes/next/_config.yml文件中搜索local_search,进行设置 
1  | local_search:  | 
添加打赏
NexT主要提供三种打赏方式分别是微信、支付宝、比特币
在themes/next搜索Reward:
1  | reward_settings:  | 
友情链接
1  | # Blog rolls #友情链接  | 
添加阅读统计
给每篇文章进行添加阅读统计,效果如下图:
进入 leancloud
创建应用
进入设置页面获取应用Key
将App ID、App Key 配置到next/_config.yml中leancloud_visitors
1  | leancloud_visitors:  | 
在leancloud存储的位置创建Class,必须命名为Counter
查看后台统计数据
添加评论
我的博客选择的是Valine。
在next/_config.yml搜索Valine,进入 Valine 官网,也是 leancloud 官网,进入leancloud 控制台,没有账号密码就进行设置。
创建应用
参考上面添加阅读统计的创建应用。进入设置页面获取应用key
参考上面添加阅读统计的进入设置页面获取应用key。在
next/_config.yml进行配置。
1  | valine:  | 
- 显示结果
 
这样就完成了valine评论的配置了,接下来就可以进行评论了,我们还可以在后台查看评论信息。
- 在后台查看评论数据
 
在valine后台,存储位置中的数据里面创建Class,名称必须为命名为Comment
参考上面 添加阅读统计 的创建Class。
注:选择valine评论系统是因为支持国内网络,不需要连接外网(翻墙)就可以进行显示评论系统,而且很好管理,页面简单。
添加RSS
效果如下图:
实现方法:
- 切换到你的blog根目录下,然后安装 Hexo 插件:(这个插件会放在node_modules这个文件夹里)
 
1  | $ cnpm install --save hexo-generator-feed  | 
- 然后在根目录的站点配置文件
_config.yml下进行配置 
1  | ## Plugins: http://hexo.io/plugins/  | 
- 然后打开next主题文件夹里面的
_config.yml,在里面配置为如下: 
1  | # Set rss to false to disable feed link.  | 
点击出现桃心效果
效果如下图:
实现方法
- 打开浏览器,输入: 
http://7u2ss1.com1.z0.glb.clouddn.com/love.js - 然后将里面的代码copy一下,新建love.js文件并且将代码复制进去,然后保存。
 - 将love.js文件放到路径
/themes/next/source/js/src里面,然后打开\themes\next\layout\_layout.swig文件,在末尾(在前面引用会出现找不到的bug)添加以下代码: 
1  | <!-- 页面点击小红心 -->  | 
修改文章内链接文本样式
效果如下图:
实现方法
修改文件 themes\next\source\css\_common\components\post\post.styl,在末尾添加如下css样式:
1  | // 文章内链接文本样式  | 
其中选择.post-body 是为了不影响标题,选择 p 是为了不影响首页“阅读全文”的显示样式,颜色可以自己定义。
在每篇文章末尾统一添加“本文结束”标记
效果如下图:
实现方法
在路径 \themes\next\layout\_macro 中新建 passage-end-tag.swig 文件,并添加以下内容:
1  | <div>  | 
接着打开\themes\next\layout\_macro\post.swig文件,在post-body 之后, post-footer 之前添加如下画红色部分代码(post-footer之前两个DIV):
1  | <div>  | 
然后打开主题配置文件(_config.yml),在末尾添加:
1  | # 文章末尾添加“本文结束”标记  | 
修改``代码块自定义样式
效果如下:
实现方法
打开\themes\next\source\css\_custom\custom.styl,向里面加入:(颜色可以自己定义)
1  | // Custom styles.  | 
主页文章添加阴影效果
效果如下图:
实现方法
打开\themes\next\source\css\_custom\custom.styl,向里面加入:
1  | // 主页文章添加阴影效果  | 
添加热度
效果如下图:
实现方法
next主题集成leanCloud,打开/themes/next/layout/_macro/post.swig,在画红线的区域添加℃:
然后打开,/themes/next/languages/zh-Hans.yml,将画红框的改为热度就可以了:
网站底部字数统计
效果如下图:
实现方法
切换到根目录下,然后运行如下代码
1  | $ cnpm install hexo-wordcount --save  | 
然后在/themes/next/layout/_partials/footer.swig文件尾部加上:
1  | <div class="theme-info">  | 
添加 README.md 文件
每个项目下一般都有一个 README.md 文件,但是使用 hexo 部署到仓库后,项目下是没有 README.md 文件的。
在 Hexo 目录下的 source 根目录下添加一个 README.md 文件,修改站点配置文件 _config.yml,将 skip_render 参数的值设置为
1  | skip_render: README.md  | 
保存退出即可。再次使用 hexo d 命令部署博客的时候就不会在渲染 README.md 这个文件了。
实现统计功能
效果如下图:
实现方法
在根目录下安装 hexo-wordcount,运行:
1  | $ cnpm install hexo-wordcount --save  | 
然后在主题的配置文件中,配置如下:
1  | # Post wordcount display settings  | 
添加顶部加载条
效果如下图:
实现方法
打开/themes/next/layout/_partials/head.swig文件,添加红框上的代码
1  | <script src="//cdn.bootcss.com/pace/1.0.2/pace.min.js"></script>  | 
但是,默认的是粉色的,要改变颜色可以在/themes/next/layout/_partials/head.swig文件中添加如下代码(接在刚才link的后面)
1  | <style>  | 
在文章底部增加版权信息
效果如下图:
实现方法
在目录 next/layout/_macro/下添加 my-copyright.swig:
1  | {% if page.copyright %}  | 
在目录next/source/css/_common/components/post/下添加my-post-copyright.styl:
1  | .my_post_copyright {  | 
修改next/layout/_macro/post.swig,在代码
1  | <div>  | 
之前添加增加如下代码:
1  | <div>  | 
如下图:
修改next/source/css/_common/components/post/post.styl文件,在最后一行增加代码:
1  | @import "my-post-copyright"  | 
保存重新生成即可。如果要在该博文下面增加版权信息的显示,需要在 Markdown 中增加copyright: true的设置,类似:
1  | ---  | 
如果你觉得每次都要输入copyright: true很麻烦的话,那么在/scaffolds/post.md文件中添加:
1  | copyright: true  | 
这样每次hexo new "你的内容"之后,生成的md文件会自动把copyright:true加到里面去。
隐藏网页底部powered By Hexo / 强力驱动
打开themes/next/layout/_partials/footer.swig,隐藏或删除如下代码,如下图:
修改打赏字体不闪动
修改文件next/source/css/_common/components/post/post-reward.styl,然后注释其中的函数wechat:hover和alipay:hover,如下:
1  | /* 注释文字闪动函数  | 
文章加密访问
效果如下图:
实现方法
打开themes/next/layout/_partials/head/head.swig文件,在以下位置插入这样一段代码:
1  | <script>  | 
然后在文章上写成类似这样:
添加鼠标点击显示字体效果
效果如下图:
实现方法
在 /themes/next/source/js 下新建文件 click_show_text.js,在 click_show_text.js 文件中添加以下代码:
1  | var a_idx = 0;  | 
其中的社会主义核心价值观可以根据你自己的创意替换为其他文字,然后在 \themes\next\layout\_layout.swing 文件末尾添加以下代码:
1  | <!--单击显示文字-->  | 
添加鼠标点击烟花爆炸效果
效果如下图:
实现方法
在 \themes\next\source\js 目录下新建一个 fireworks.js 的文件,里面写入以下代码:
1  | ;function updateCoords(e){pointerX=(e.clientX||e.touches[0].clientX)-canvasEl.getBoundingClientRect().left,pointerY=e.clientY||e.touches[0].clientY-canvasEl.getBoundingClientRect().top}function setParticuleDirection(e){var t=anime.random(0,360)*Math.PI/180,a=anime.random(50,180),n=[-1,1][anime.random(0,1)]*a;return{x:e.x+n*Math.cos(t),y:e.y+n*Math.sin(t)}}function createParticule(e,t){var a={};return a.x=e,a.y=t,a.color=colors[anime.random(0,colors.length-1)],a.radius=anime.random(16,32),a.endPos=setParticuleDirection(a),a.draw=function(){ctx.beginPath(),ctx.arc(a.x,a.y,a.radius,0,2*Math.PI,!0),ctx.fillStyle=a.color,ctx.fill()},a}function createCircle(e,t){var a={};return a.x=e,a.y=t,a.color="#F00",a.radius=0.1,a.alpha=0.5,a.lineWidth=6,a.draw=function(){ctx.globalAlpha=a.alpha,ctx.beginPath(),ctx.arc(a.x,a.y,a.radius,0,2*Math.PI,!0),ctx.lineWidth=a.lineWidth,ctx.strokeStyle=a.color,ctx.stroke(),ctx.globalAlpha=1},a}function renderParticule(e){for(var t=0;t<e.animatables.length;t++){e.animatables[t].target.draw()}}function animateParticules(e,t){for(var a=createCircle(e,t),n=[],i=0;i<numberOfParticules;i++){n.push(createParticule(e,t))}anime.timeline().add({targets:n,x:function(e){return e.endPos.x},y:function(e){return e.endPos.y},radius:0.1,duration:anime.random(1200,1800),easing:"easeOutExpo",update:renderParticule}).add({targets:a,radius:anime.random(80,160),lineWidth:0,alpha:{value:0,easing:"linear",duration:anime.random(600,800)},duration:anime.random(1200,1800),easing:"easeOutExpo",update:renderParticule,offset:0})}function debounce(e,t){var a;return function(){var n=this,i=arguments;clearTimeout(a),a=setTimeout(function(){e.apply(n,i)},t)}}var canvasEl=document.querySelector(".fireworks");if(canvasEl){var ctx=canvasEl.getContext("2d"),numberOfParticules=30,pointerX=0,pointerY=0,tap="mousedown",colors=["#FF1461","#18FF92","#5A87FF","#FBF38C"],setCanvasSize=debounce(function(){canvasEl.width=2*window.innerWidth,canvasEl.height=2*window.innerHeight,canvasEl.style.width=window.innerWidth+"px",canvasEl.style.height=window.innerHeight+"px",canvasEl.getContext("2d").scale(2,2)},500),render=anime({duration:1/0,update:function(){ctx.clearRect(0,0,canvasEl.width,canvasEl.height)}});document.addEventListener(tap,function(e){"sidebar"!==e.target.id&&"toggle-sidebar"!==e.target.id&&"A"!==e.target.nodeName&&"IMG"!==e.target.nodeName&&(render.play(),updateCoords(e),animateParticules(pointerX,pointerY))},!1),setCanvasSize(),window.addEventListener("resize",setCanvasSize,!1)}"use strict";function updateCoords(e){pointerX=(e.clientX||e.touches[0].clientX)-canvasEl.getBoundingClientRect().left,pointerY=e.clientY||e.touches[0].clientY-canvasEl.getBoundingClientRect().top}function setParticuleDirection(e){var t=anime.random(0,360)*Math.PI/180,a=anime.random(50,180),n=[-1,1][anime.random(0,1)]*a;return{x:e.x+n*Math.cos(t),y:e.y+n*Math.sin(t)}}function createParticule(e,t){var a={};return a.x=e,a.y=t,a.color=colors[anime.random(0,colors.length-1)],a.radius=anime.random(16,32),a.endPos=setParticuleDirection(a),a.draw=function(){ctx.beginPath(),ctx.arc(a.x,a.y,a.radius,0,2*Math.PI,!0),ctx.fillStyle=a.color,ctx.fill()},a}function createCircle(e,t){var a={};return a.x=e,a.y=t,a.color="#F00",a.radius=0.1,a.alpha=0.5,a.lineWidth=6,a.draw=function(){ctx.globalAlpha=a.alpha,ctx.beginPath(),ctx.arc(a.x,a.y,a.radius,0,2*Math.PI,!0),ctx.lineWidth=a.lineWidth,ctx.strokeStyle=a.color,ctx.stroke(),ctx.globalAlpha=1},a}function renderParticule(e){for(var t=0;t<e.animatables.length;t++){e.animatables[t].target.draw()}}function animateParticules(e,t){for(var a=createCircle(e,t),n=[],i=0;i<numberOfParticules;i++){n.push(createParticule(e,t))}anime.timeline().add({targets:n,x:function(e){return e.endPos.x},y:function(e){return e.endPos.y},radius:0.1,duration:anime.random(1200,1800),easing:"easeOutExpo",update:renderParticule}).add({targets:a,radius:anime.random(80,160),lineWidth:0,alpha:{value:0,easing:"linear",duration:anime.random(600,800)},duration:anime.random(1200,1800),easing:"easeOutExpo",update:renderParticule,offset:0})}function debounce(e,t){var a;return function(){var n=this,i=arguments;clearTimeout(a),a=setTimeout(function(){e.apply(n,i)},t)}}var canvasEl=document.querySelector(".fireworks");if(canvasEl){var ctx=canvasEl.getContext("2d"),numberOfParticules=30,pointerX=0,pointerY=0,tap="mousedown",colors=["#FF1461","#18FF92","#5A87FF","#FBF38C"],setCanvasSize=debounce(function(){canvasEl.width=2*window.innerWidth,canvasEl.height=2*window.innerHeight,canvasEl.style.width=window.innerWidth+"px",canvasEl.style.height=window.innerHeight+"px",canvasEl.getContext("2d").scale(2,2)},500),render=anime({duration:1/0,update:function(){ctx.clearRect(0,0,canvasEl.width,canvasEl.height)}});document.addEventListener(tap,function(e){"sidebar"!==e.target.id&&"toggle-sidebar"!==e.target.id&&"A"!==e.target.nodeName&&"IMG"!==e.target.nodeName&&(render.play(),updateCoords(e),animateParticules(pointerX,pointerY))},!1),setCanvasSize(),window.addEventListener("resize",setCanvasSize,!1)};  | 
然后在 \themes\next\layout\layout.swing 文件中写入以下代码:
1  | <canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas>  | 
自定义鼠标指针样式
在 \themes\next\source\css\_custom\custom.styl 文件 body 样式里写入如下代码:
1  | /*自定义鼠标样式*/  | 
鼠标指针可以用 Axialis CursorWorkshop 这个软件自己制作,不同主题具体放的文件有所不同,确保在博客主体 body 的 CSS 文件中即可,其中的鼠标指针链接可替换成自己的,首先尝试加载mouse.cur ,如果该文件不存在或由于其他原因无效,那么 auto 会被使用,也就是自动默认效果,图片格式为.ico、.ani、.cur,建议使用.cur,如果使用.ani或者其他格式无效,原因是浏览器兼容问题。
添加彩色滚动变换字体
在你想要添加彩色滚动变换字体的地方写入以下代码即可,其中文字可自行更改:
1  | <div id="binft"></div>  | 
我是放在了侧边栏头像的下边,描述的位置\themes\next\layout\_macro\sidebar.swing:
浏览器网页标题恶搞
效果如下图:
实现方法
在目录 \themes\next\source\js 下新建一个 FunnyTitle.js 文件,在里面填写如下代码:
1  | <!--浏览器搞笑标题-->  | 
然后在 \themes\next\layout\layout.swing 文件中写入以下代码:
1  | <!--浏览器搞笑标题-->  | 
再次部署博客后就可以看见标题搞笑的效果了。
添加网站雪花飘落效果
效果如下图:
实现方法
在 \themes\next\source\js 目录下新建一个 snow.js 文件,粘贴以下代码:
1  | /*样式一*/  | 
1  | /*样式二*/  | 
然后在 \themes\next\layout\layout.swing 文件中写入以下代码:
1  | <!-- 雪花特效 -->  | 
如果没效果,请确认网页是否已载入JQurey,如果没有请在下雪代码之前引入JQ即可:
1  | <script type="text/javascript" src="http://libs.baidu.com/jquery/1.8.3/jquery.js"></script>  | 
添加背景动态彩带效果
效果如下图:
实现方法
在 \themes\next\layout\layout.swing 文件中写入以下代码:
1  | <!-- 样式一(鼠标点击更换样式) -->  | 
添加背景代码雨特效
效果如下图:
实现方法
在 \themes\next\source\js 目录下新建一个 DigitalRain.js 文件,粘贴以下代码:
1  | window.onload = function(){  | 
然后在 \themes\next\source\css\_custom\custom.styl 中写入样式:
1  | canvas {  | 
在 \themes\next\layout\layout.swing 文件中写入以下代码:
1  | <!-- 代码雨 -->  | 
代码块复制功能
效果如下图:
实现方法
下载 clipboard.js
保存文件clipboard.js / clipboard.min.js 到路径\themes\next\source\js\src下。
- 使用clipboard.js
 
也是在 \themes\next\source\js\src 目录下,创建clipboard-use.js,文件内容如下:
1  | /*页面载入完成后,创建复制按钮*/  | 
在\themes\next\source\css\_custom\custom.styl样式文件中添加下面代码:
1  | //代码块复制按钮  | 
- 引用
 
在\themes\next\layout\_layout.swig文件中,添加引用(注:在 swig 末尾或 body 结束标签(</body>)之前添加):
1  | <!-- 代码块复制功能 -->  | 
Hexo文章中图片点击实现全屏查看
使用图片浏览放大功能fancybox插件。
- 切换到lib目录
 
1  | $ cd next/source/lib  | 
- 下载插件
 
1  | $ git clone https://github.com/theme-next/theme-next-fancybox3 fancybox  | 
- 更改主题配置文件
 
1  | fancybox: true  | 
3D动态标签云
- 安装标签云
hexo-tag-cloud插件 
1  | $ cnpm install hexo-tag-cloud@^2.* --save  | 
- 配置
sidebar.swig文件 
打开next/layout/_macro/sidebar.swig,输入:
1  | {% if site.tags.length > 1 %}  | 
根据自己的需要放在合适的位置。重新hexo s一下,就可以出现刚刚那个3d标签云了!
添加卡通人物
效果如下图:
实现方法
- 下载 live2d
 
1  | $ cnpm install --save hexo-helper-live2d  | 
- 下载模型
 
1  | $ cnpm install live2d-widget-model-z16  | 
- 修改站点配置文件
 
1  | #添加萌宠,以下任选一个  | 
卡通人物升级版
效果如下图:
能说话、能换装、能玩游戏、能拍照、还能自定义。
实现方法
下载 张书樵 大神的项目,解压到本地博客目录的
themes/next/source下,修改autoload.js文件,如下:
将1
2
3
4const live2d_path = "https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget/";
改为
const live2d_path = "/live2d-widget/";在
/themes/next/layout/_layout.swing中,新增如下内容:
1  | <script src="/live2d-widget/autoload.js"></script>  | 
- 在主题配置文件 中,新增如下内容:
 
1  | live2d:  | 
想修改看板娘大小、位置、格式、文本内容等,可查看并修改 waifu-tips.js 、 waifu-tips.json 和 waifu.css。
扩展看板娘模型
由于官方的看板娘模型比较少,可手动添加模型。
把 github模型 下载到本地,解压后将assets目录拷贝到博客根目录中的live2d_models(自己新建,文件名不可改)里,再修改_config.yml 里的 live2d中model.use即可(改为live2d_models中的模型名字就行)。
去掉顶部黑线
打开themes\next\source\css\_custom\custom.styl添加以下代码:
1  | .headband {display:none;}  | 
修改主题页面布局为圆角
方法一
在/themes/next/source/css/_variables/custom.styl文件种添加如下代码(以Gemini风格为例):
1  | // 修改主题页面布局为圆角  | 
方法二
在\themes\next\source\css\_variables\Gemini.styl文件中直接添加:
1  | // 修改主题页面布局为圆角  | 
效果如下图:
自适应背景图片
在站点配置文件夹
/themes/next/source/images/放入你的背景图片;然后修改主题文件夹
themes/source/css/_custom/custom.styl,在custom.styl开头加入如下的代码:
1  | body {  | 
防止每次heox clean 后CNAME文件被删除
先把
github中的CNAME文件复制一份到本地public再安装插件
1  | cnpm install hexo-generator-cname --save  | 
- 根目录
_config.yml中添加 
1  | Plugins:  | 
并修改
1  | url: yoursite.com  | 
去除valine的Powered By
修改\themes\next\layout\_third-party\comments\valine.swig文件
1  | new Valine({  | 
增加词云
增加之前的效果如下图:
方法比较简单,加个js脚本就好了,就加在标签的那个页面好了。
打开themes\next\layout\page.swig 找到
1  | {% if page.type === "tags" %}  | 
将下面这段代码:
1  | <div class="tag-cloud">  | 
换成下面这段代码:
1  | <div class="tag-cloud">  | 
效果如下图:
代码块Mac Panel特效
先上效果图:
能设置阴影效果和实现文本编辑功能,不过文本只存在浏览器页面上,不会真正保存。
实现步骤
引入JS
这里需要新建两个js文件events.js和codeblock.js,路径位于/themes/next/scripts/包下。
events.js代码:
1  | // mac Panel效果代码块相关  | 
codeblock.js代码:
1  | // mac Panel效果代码块相关  | 
引入CSS
在/themes/next/source/css/_common/components/highlight/目录下新建macPanel.styl文件,内容如下:
1  | 
  | 
此css是根据我本地的样式做过调整,注释的代码为原有的,根据需要调整样式即可。
配置引用
在/themes/next/source/css/_common/components/highlight/highlight.styl文件中引入刚才新建的macPanel.styl:
1  | @require "macPanel"  | 
配置在文件的顶部位置即可。
到此Mac Panel已配置完成,根据需要可调整主题配置文件中的highlight_theme选项,选择自己喜欢的样式。
可能遇到的问题
如果在配置完毕后,hexo启动报错,可将站点配置文件里的highlight属性auto_detect改成false:
1  | highlight:  | 
如果还是有问题,可仔细检查一下刚才新建的文件、修改的配置文件,有什么地方配置错了,或者是语法上的错误,修改后重新启动即可看到效果。
为文章生成永久链接
hexo默认的文章链接形式为year/:month/:day/:title,是按照年、月、日、标题来生成的。当把文章源文件名改掉之后,链接也会改变,这很不友好。并且如果文章标题是中文的,那么该路径就会出现中文字符。在路径中出现了中文字符很容易引发各种问题,而且也不利于seo,因为路径包含了年月日三个层级,层级太深不利于百度蜘蛛抓取。
解决办法就是利用其它的插件来生成唯一的路径,这样就算文件标题随意修改,而不会导致原本的链接失效而造成站点下存在大量的死链。
安装插件
1  | cnpm install hexo-abbrlink --save  | 
注意:执行此命令可能会不成功,提示你缺少相应的依赖,比如babel-eslint、mini-css-extract-plugin、webpack-cli…使用npm命令安装即可。比如:
1  | npm install eslint@4.x babel-eslint@8 --save-dev  | 
配置
修改根目录站点配置文件config.yml,改为:
1  | permalink: posts/:abbrlink.html # 此处可以自己设置,也可以直接使用 /:abbrlink  | 
这里将页面都添加了 .html 的后缀,用来伪装成静态页面(虽说Hexo的页面本身就是静态页面),这样可以直接从路径就知道这是个静态页面,方便seo。
生成的链接将会是这样的(官方样例):
1  | crc16 & hex  | 
生成完后,原md文件的Front-matter 内会增加abbrlink 字段,值为生成的ID 。这个字段确保了在我们修改了Front-matter 内的博客标题title或创建日期date字段之后而不会改变链接地址。