摘要: 本文主要介绍对自己博客页面的优化,在NexT
主题下进行修改,本文写的时候使用的是v7.8.0
,后续更新可能有些地方不再适用,但是都大同小异。
下边有两个配置文件,一个是位于站点根目录下的_config.yml
文件,称为站点配置文件,另一个是位于站点目录中主题文件中的_config.yml
文件,称之为主题配置文件,在我的ubuntu中分别位于以下位置。
1 2 3 4 # 站点配置文件位置 ~/02MyBlog/hexofiles/ # 主题配置文件位置 ~/02MyBlog/hexofiles/themes/next
1.nexT主题的安装
NexT
文档地址:NexT官方中文文档
主题下载下载命令如下:
1 2 3 4 # 进入初始化好的hexo文件夹 cd ~/02MyBlog/hexofiles/ # 下载主题源码文件 git clone https://github.com/theme-next/hexo-theme-next.git themes/next
也可以按照官网进行安装
1 2 3 4 5 6 # 进入初始化的文件夹 cd <hexo folder> # 创建主题文件夹 mkdir themes/next # 下载主题文件 curl -s https://api.github.com/repos/theme-next/hexo-theme-next/releases/latest | grep tarball_url | cut -d '"' -f 4 | wget -i - -O- | tar -zx -C themes/next --strip-components=1
1 vim ~/02MyBlog/hexofiles/_config.yml
修改如下:
2.nexT主题显示优化 2.1修改nexT主题样式 Scheme
是 NexT
提供的一种特性,借助于 Scheme
,NexT
提供多种不同的外观。
1 2 3 4 # 进入主题文件夹 cd ~/02MyBlog/hexofiles/themes/next # 选择自己想要的主题 vim _config.yml
主题配置部分如下(具体怎样可以自己修改查看,我使用的是第三个)
2.2添加鼠标点击小红心特效 按如下命令进入相应的文件夹
1 2 3 4 # 进入js文件夹 cd ~/02MyBlog/hexofiles/themes/next/source/js/ # 新建特效实现文件 vim myclicklove.js
在myclicklove.js
中添加如下代码
1 !function (e,t,a ) {function n ( ) {c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}" ),o(),r()}function r ( ) {for (var e=0 ;e<d.length;e++)d[e].alpha<=0 ?(t.body.removeChild(d[e].el),d.splice(e,1 )):(d[e].y--,d[e].scale+=.004 ,d[e].alpha-=.013 ,d[e].el.style.cssText="left:" +d[e].x+"px;top:" +d[e].y+"px;opacity:" +d[e].alpha+";transform:scale(" +d[e].scale+"," +d[e].scale+") rotate(45deg);background:" +d[e].color+";z-index:99999" );requestAnimationFrame(r)}function o ( ) {var t="function" ==typeof e.onclick&&e.onclick;e.onclick=function (e ) {t&&t(),i(e)}}function i (e ) {var a=t.createElement("div" );a.className="heart" ,d.push({el :a,x :e.clientX-5 ,y :e.clientY-5 ,scale :1 ,alpha :1 ,color :s()}),t.body.appendChild(a)}function c (e ) {var a=t.createElement("style" );a.type="text/css" ;try {a.appendChild(t.createTextNode(e))}catch (t){a.styleSheet.cssText=e}t.getElementsByTagName("head" )[0 ].appendChild(a)}function s ( ) {return "rgb(" +~~(255 *Math .random())+"," +~~(255 *Math .random())+"," +~~(255 *Math .random())+")" }var d=[];e.requestAnimationFrame=function ( ) {return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function (e ) {setTimeout (e,1e3 /60 )}}(),n()}(window ,document );
进入调用该文件的文件夹并打开相应的引用文件
1 2 3 4 # 进入文件所在文件夹 cd ~/02MyBlog/hexofiles/themes/next/layout/ # 打开特效引用文件 vim _layout.swig
在文档末尾的<body></body>
标签内(至少我目前还没有发现有问题,有问题再修改)添加如下代码:
1 2 <script type ="text/javascript" src ="/js/myclicklove.js" > </script >
2.3设置菜单 菜单配置包括三个部分,第一是菜单项(名称和链接),第二是菜单项的显示文本,第三是菜单项对应的图标。NexT
使用的是 Font Awesome 提供的图标,Font Awesome
提供了 600+
的图标,可以满足绝大的多数的场景,同时无须担心在 Retina
屏幕下图标模糊的问题。
2.3.1设定菜单内容 对应的字段是 menu
。菜单内容的设置格式是:item name: link
。其中 item name
是一个名称,这个名称并不直接显示在页面上,它用于匹配图标以及翻译。
1 2 # 编辑相应主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 menu: home: / || fa fa-home archives: /archives/ || fa fa-archive
以下列出几项作为说明
键值
设定值
显示文本(简体中文)
home
home: /
主页
archives
archives: /archives
归档页
categories
categories: /categories
分类页
tags
tags: /tags
标签页
about
about: /about
关于页面
commonweal
commonweal: /404.html
公益 404
以简体中文为例,若需要添加一个菜单项,比如 search
。那么就需要修改简体中文对应的翻译文件 languages/zh-CN.yml
,在 menu
字段下添加一项
1 2 3 4 5 6 7 8 9 10 menu: home: 首页 archives: 归档 categories: 分类 tags: 标签 about: 关于 search: 搜索 schedule: 日程表 sitemap: 站点地图 commonweal: 公益 404
2.4设置头像 URI
就是头像的地址,地址可以是以下的两种:
地址
值
完整的互联网 URI
http://example.com/avatar.png
站点内的地址
将头像放置主题目录下的 source/uploads/ (新建 uploads 目录若不存在)配置为:avatar: /uploads/avatar.png 或者 放置在 source/images/ 目录下配置为:avatar: /images/avatar.png
打开主题配置文件进行修改。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改为以下内容。
1 2 3 4 5 6 7 8 avatar: url: rounded: true rotated: true
用该图片作为头像
1 2 3 hexo new page "about" hexo new page "tags" hexo new page "categories"
新建完成之后会发现 ~/02MyBlog/hexofiles/source/
文件夹中多了三个文件夹
分别进入刚才新建的三个文件夹,修改index.md
文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--about中的index.md--> --- title: 关于 type: "about" --- <!--tags中的index.md--> --- title: 标签 type: "tags" --- <!--tags中的index.md--> --- title: 分类 type: "categories" ---
2.6设置背景图片和透明度
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
去掉styles.styl
一行前边的#
1 2 3 4 5 6 7 8 9 10 11 12 13 custom_file_path: style: source/_data/styles.styl
在站点根目录的source
目录下新建_data
文件夹,并新建styles.styl
文件
1 2 3 4 5 6 7 8 # 进入文件夹 cd ~/02MyBlog/hexofiles/source/ # 新建 _data 文件夹 mkdir _data # 新建并修改styles.styl文件 vim styles.styl # 后续用以下命令直接修改 vim ~/02MyBlog/hexofiles/source/_data/styles.styl
在styles.styl
文件添加如下内容
1 2 3 4 5 6 7 8 9 10 body { background:url(/images/background.jpg); // 设定背景图片,images同处于source文件夹下 background-repeat : no-repeat; background-attachment :fixed; background-position :50% 50% ; opacity : 0.8 ; background-size : cover// 设置保持图像的纵横比并将图像缩放成将完全覆盖背景定位区域的最小大小 }
在生成静态页面的时候并会有如下警告(有说是因为node
和npm
版本太高),但是并不影响背景的正常显示,可以忽略。
1 2 3 4 5 6 7 (node:10806) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency (Use `node --trace-warnings ...` to show where the warning was created) (node:10806) Warning: Accessing non-existent property 'column' of module exports inside circular dependency (node:10806) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency (node:10806) Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency (node:10806) Warning: Accessing non-existent property 'column' of module exports inside circular dependency (node:10806) Warning: Accessing non-existent property 'filename' of module exports inside circular dependency
2.6添加搜索功能
1 2 3 4 5 # 在站点根目录下分别安装插件 npm install hexo-generator-search --save npm install hexo-generator-searchdb --save # 编辑相应文件 vim ~/02MyBlog/hexofiles/_config.yml
在站点配置文件中添加如下内容
1 2 3 4 5 search: path: search.xml field: post format: html limit: 10000
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
将 enable: false
改为enable: true
1 2 3 4 5 6 7 8 9 10 11 12 13 local_search: enable: true trigger: auto top_n_per_article: 1 unescape: false preload: false
2.7文章目录 我这边自己写文章的时候已经写了编号,所以需要关闭显示的时候的自动编号。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改主题配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 toc: enable: true number: false wrap: false expand_all: false max_depth: 6
2.8代码高亮主题 需要先将站点配置文件高亮代码设置打开(见3.3节),再编辑主题配置文件。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
选择相应的高亮的主题
1 2 3 4 highlight_theme: night
2.9代码块复制 在NexT7.x的版本中直接开启复制功能即可。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
将以下设置为true
,并选择代码块的风格。
1 2 3 4 5 6 copy_button: enable: true show_result: true style: mac
2.10动态下雪特效
首先进入特效配置的文件夹中去
1 2 cd ~/02MyBlog/hexofiles/themes/next/source /js/
在调用以下特效代码实现文件之前需要先引入jquery.min.js
(我没有深究这到底是什么,能用就好,能用就好,哈哈哈),否则特效不会生效。
编辑引用文件_layout.swig
1 2 # 编辑_layout.swig vim ~/02MyBlog/hexofiles/themes/next/layout/_layout.swig
在<body></body>
标签内添加以下代码
1 <script type ="text/javascript" src ="//libs.baidu.com/jquery/1.8.3/jquery.min.js" > </script >
说明:这个特效的代码可以实现雪花飘落,但是下拉的时速度大于雪花飘落速度的时候,雪花就消失了,等一会才会落下来。
1 2 # 新建六边形雪花实现文件 vim snow1.js
添加如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 (function ($ ) { $.fn.snow = function (options ) { var $flake = $('<div id="snowbox" />' ).css({'position' : 'absolute' ,'z-index' :'9999' , 'top' : '-50px' }).html('❄' ), documentHeight = $(document ).height(), documentWidth = $(document ).width(), defaults = { minSize : 10 , maxSize : 20 , newOn : 1000 , flakeColor : "#AFDAEF" }, options = $.extend({}, defaults, options); var interval= setInterval ( function ( ) { var startPositionLeft = Math .random() * documentWidth - 100 , startOpacity = 0.5 + Math .random(), sizeFlake = options.minSize + Math .random() * options.maxSize, endPositionTop = documentHeight - 200 , endPositionLeft = startPositionLeft - 500 + Math .random() * 500 , durationFall = documentHeight * 10 + Math .random() * 5000 ; $flake.clone().appendTo('body' ).css({ left: startPositionLeft, opacity: startOpacity, 'font-size' : sizeFlake, color: options.flakeColor }).animate({ top: endPositionTop, left: endPositionLeft, opacity: 0.2 },durationFall,'linear' ,function ( ) { $(this ).remove() }); }, options.newOn); }; })(jQuery); $(function ( ) { $.fn.snow({ minSize: 5 , maxSize: 50 , newOn: 300 }); });
说明:这个特效的代码好像是没有全屏显示,具体的可能是参数设置问题,我后边用的是樱花的一个特效,那个比较好用。
1 2 # 新建圆形雪花特效文件 vim snow2.js
添加如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 function snowFall (snow ) { snow = snow || {}; this .maxFlake = snow.maxFlake || 200 ; this .flakeSize = snow.flakeSize || 10 ; this .fallSpeed = snow.fallSpeed || 1 ; } requestAnimationFrame = window .requestAnimationFrame || window .mozRequestAnimationFrame || window .webkitRequestAnimationFrame || window .msRequestAnimationFrame || window .oRequestAnimationFrame || function (callback ) { setTimeout (callback, 1000 / 60 ); }; cancelAnimationFrame = window .cancelAnimationFrame || window .mozCancelAnimationFrame || window .webkitCancelAnimationFrame || window .msCancelAnimationFrame || window .oCancelAnimationFrame; snowFall.prototype.start = function ( ) { snowCanvas.apply(this ); createFlakes.apply(this ); drawSnow.apply(this ) } function snowCanvas ( ) { var snowcanvas = document .createElement("canvas" ); snowcanvas.id = "snowfall" ; snowcanvas.width = window .innerWidth; snowcanvas.height = document .body.clientHeight; snowcanvas.setAttribute("style" , "position:absolute; top: 0; left: 0; z-index: 1; pointer-events: none;" ); document .getElementsByTagName("body" )[0 ].appendChild(snowcanvas); this .canvas = snowcanvas; this .ctx = snowcanvas.getContext("2d" ); window .onresize = function ( ) { snowcanvas.width = window .innerWidth; } } function flakeMove (canvasWidth, canvasHeight, flakeSize, fallSpeed ) { this .x = Math .floor(Math .random() * canvasWidth); this .y = Math .floor(Math .random() * canvasHeight); this .size = Math .random() * flakeSize + 2 ; this .maxSize = flakeSize; this .speed = Math .random() * 1 + fallSpeed; this .fallSpeed = fallSpeed; this .velY = this .speed; this .velX = 0 ; this .stepSize = Math .random() / 30 ; this .step = 0 } flakeMove.prototype.update = function ( ) { var x = this .x, y = this .y; this .velX *= 0.98 ; if (this .velY <= this .speed) { this .velY = this .speed } this .velX += Math .cos(this .step += .05 ) * this .stepSize; this .y += this .velY; this .x += this .velX; if (this .x >= canvas.width || this .x <= 0 || this .y >= canvas.height || this .y <= 0 ) { this .reset(canvas.width, canvas.height) } }; flakeMove.prototype.reset = function (width, height ) { this .x = Math .floor(Math .random() * width); this .y = 0 ; this .size = Math .random() * this .maxSize + 2 ; this .speed = Math .random() * 1 + this .fallSpeed; this .velY = this .speed; this .velX = 0 ; }; flakeMove.prototype.render = function (ctx ) { var snowFlake = ctx.createRadialGradient(this .x, this .y, 0 , this .x, this .y, this .size); snowFlake.addColorStop(0 , "rgba(255, 255, 255, 0.9)" ); snowFlake.addColorStop(.5 , "rgba(255, 255, 255, 0.5)" ); snowFlake.addColorStop(1 , "rgba(255, 255, 255, 0)" ); ctx.save(); ctx.fillStyle = snowFlake; ctx.beginPath(); ctx.arc(this .x, this .y, this .size, 0 , Math .PI * 2 ); ctx.fill(); ctx.restore(); }; function createFlakes ( ) { var maxFlake = this .maxFlake, flakes = this .flakes = [], canvas = this .canvas; for (var i = 0 ; i < maxFlake; i++) { flakes.push(new flakeMove(canvas.width, canvas.height, this .flakeSize, this .fallSpeed)) } } function drawSnow ( ) { var maxFlake = this .maxFlake, flakes = this .flakes; ctx = this .ctx, canvas = this .canvas, that = this ; ctx.clearRect(0 , 0 , canvas.width, canvas.height); for (var e = 0 ; e < maxFlake; e++) { flakes[e].update(); flakes[e].render(ctx); } this .loop = requestAnimationFrame(function ( ) { drawSnow.apply(that); }); } var snow = new snowFall({maxFlake :60 });snow.start();
以上两种样式,选一种用就可以了,然后修改调用特效代码引用文件_layout.swig
。
1 vim ~/02MyBlog/hexofiles/themes/next/layout/_layout.swig
在上边引入的调用jquery.min.js
文件的下方添加如下代码,src="/js/snow1.js
表示要调用的特效实现文件的位置,我这里用了六边形雪花的特效,这里添加了一个屏幕宽度判断。
1 2 3 4 5 6 7 8 <script type ="text/javascript" > var windowWidth = $(window ).width(); if (windowWidth > 480) { document.write('<script type ="text/javascript" src ="/js/snow1.js" > <\/script>'); } </script >
2.11樱花特效实现 该特效的实现过程与上边的雪花特效类似,我比较喜欢这一个,所以后来换成了这个。
由于所用的代码源码名称为sakura
所以所有的特效文件名称也按这个名字来。
1 2 3 4 5 6 # 进入相应的文件夹 cd ~/02MyBlog/hexofiles/themes/next/source/js/ # 新建js文件 vim sakura.js # 后续修改可以使用以下命令 vim ~/02MyBlog/hexofiles/themes/next/source/js/sakura.js
添加链接中的代码到sakura.js
文件中。
sakura
特效代码:sakura.js
1 2 # 打开引用文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_layout.swig
这里注意,我把之前的两种效果都给屏蔽掉了,采用的方式是直接删除,但是通过这一个特效的添加发现其实可以通过变量来配置是否开启相应的特效效果。
在刚才的_layout.swig
文件中<body></body>
内部引用以下代码。
1 2 3 4 {% if theme.sakura.enable %} <script async src ="/js/sakura.js" > </script > {% endif %}
1 2 # 打开主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
添加以下代码:
2.12字数统计与阅读时长
安装hexo-symbols-count-time
插件
插件地址:hexo-symbols-count-time
1 https://github.com/theme-next/hexo-symbols-count-time
在站点根目录中执行以下命令安装该插件.
1 npm i hexo-symbols-count-time --save
1 2 # 打开主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改主题配置文件部分如下:
1 2 3 4 5 6 7 8 symbols_count_time: separated_meta: true item_text_post: true item_text_total: false awl: 2 wpm: 275
参数说明:
参数
说明
separated_meta
是否换行显示字数统计和阅读时长
item_text_post
文章的字数统计、阅读时长用图标还是文本表示
item_text_total
博客底部统计字数统计、阅读时长使用图标还是 文本表示
awl(Average Word Length)
设定多少字符统计为一个字(word),中文博客需要设置为 2
wpm(Words Per Minute)
阅读时长1分钟需要统计多少字(word),官方阅读参考为:Slow ≈ 200;Normal ≈ 275;Fast ≈ 350
2.13添加版权说明 该段的优化,可以实现版权的正常显示,但是复制文章链接的功能只能在刷新后才可以使用,原因是后边添加音乐播放器的时候开启了pjax
这就导致了后面鼠标点击后的复制操作不会被加载,目前还没有解决,只能刷新后恢复正常。
(1)创建一个my-copyright.swig
文件
1 2 3 4 5 6 # 进入目标文件夹 cd ~/02MyBlog/hexofiles/themes/next/layout/_macro/ # 新建mycopyright.swig,名字随意,下边对应就好 vim my-copyright.swig # 后续可以用以下命令直接修改该文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_macro/my-copyright.swig
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 {% if page.copyright %} <div class ="my_post_copyright" > <script src ="//cdn.bootcss.com/clipboard.js/1.5.10/clipboard.min.js" > </script > <script src ="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js" > </script > <script src ="https://unpkg.com/sweetalert/dist/sweetalert.min.js" > </script > <p > <span > 文章标题:</span > <a href ="{{ url_for(page.path) }}" > {{ page.title }}</a > </p > <p > <span > 文章作者:</span > <a href ="/" title ="访问 {{ theme.author }} 的个人博客" > {{ theme.author }}</a > </p > <p > <span > 发布时间:</span > {{ page.date.format("YYYY年MM月DD日 - HH:mm") }}</p > <p > <span > 最后更新:</span > {{ page.updated.format("YYYY年MM月DD日 - HH:mm") }}</p > <p > <span > 原始链接:</span > <a href ="{{ url_for(page.path) }}" title ="{{ page.title }}" > {{ page.permalink }}</a > <span class ="copy-path" title ="点击复制文章链接" > <i class ="fa fa-clipboard" data-clipboard-text ="{{ page.permalink }}" aria-label ="复制成功!" > </i > </span > </p > <p > <span > 许可协议:</span > <i class ="fa fa-creative-commons" > </i > <a rel ="license" href ="https://creativecommons.org/licenses/by-nc-nd/4.0/" target ="_blank" title ="Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)" > 署名-非商业性使用-禁止演绎 4.0 国际</a > 转载请保留原文链接及作者。</p > </div > <script > var clipboard = new Clipboard('.fa-clipboard' ); $(".fa-clipboard" ).click(function ( ) { clipboard.on('success' , function ( ) { swal({ title: "" , text: '复制成功' , icon: "success" , showConfirmButton: true }); }); }); </script > {% endif %}
<i class="far fa-copyright"></i>
这句话是在许可协议这行的,这是一个Font Awesome
的版权的图标。
(2)新建一个my-post-copyright.styl
文件
1 2 3 4 5 6 # 进入目标文件夹 cd ~/02MyBlog/hexofiles/themes/next/source/css/_common/components/post/ # 新建my-post-copyright.styl,名字随意,下边对应就好 vim my-post-copyright.styl # 后续可以用以下命令直接修改该文件 vim ~/02MyBlog/hexofiles/themes/next/source/css/_common/components/post/my-post-copyright.styl
内容如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 .my_post_copyright { width : 85% ; max-width : 45em ; margin : 2.8em auto 0 ; padding : 0.5em 1.0em ; border : 1px solid #d3d3d3 ; font-size : 0.93rem ; line-height : 1.6em ; word-break : break-all; background : rgba(255 ,255 ,255 ,0.4 ); } .my_post_copyright p{margin :0 ;}.my_post_copyright span { display : inline-block; width : 5.2em ; color : #b5b5b5 ; font-weight : bold; } .my_post_copyright .raw { margin-left : 1em ; width : 5em ; } .my_post_copyright a { color : #808080 ; border-bottom :0 ; } .my_post_copyright a :hover { color : #a3d2a3 ; text-decoration : underline; } .my_post_copyright :hover .fa-clipboard { color : #000 ; } .my_post_copyright .post-url :hover { font-weight : normal; } .my_post_copyright .copy-path { margin-left : 1em ; width : 1em ; +mobile(){display :none;} } .my_post_copyright .copy-path :hover { color : #808080 ; cursor : pointer; }
1 2 # 打开引用文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_macro/post.swig
在以下代码之间
1 2 3 4 5 6 {%- if theme.follow_me %} {{ partial('_partials/post/post-followme.swig', {}, {cache: theme.cache.enable}) }} {%- endif %} <footer class ="post-footer" >
添加以下代码
1 2 3 4 5 6 <div > {% if not is_index %} {% include 'my-copyright.swig' %} {% endif %} </div >
1 2 # 打开引用文件 vim ~/02MyBlog/hexofiles/themes/next/source/css/_common/components/post/post.styl
在结尾添加以下代码:
1 @import "my-post-copyright"
1 2 # 打开相应文件 vim ~/02MyBlog/hexofiles/scaffolds/post.md
修改如下:
1 2 3 4 5 6 --- title: {{ title }} date: {{ date }} tags: copyright: true #新增copyright ---
2.14添加结束标记
1 2 3 4 5 6 # 进入目标文件夹 cd ~/02MyBlog/hexofiles/themes/next/layout/_macro/ # 新建实现文件 vim passage-end-tag.swig # 后续可以用以下命令直接修改该文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_macro/passage-end-tag.swig
在文件中添加以下内容:
1 2 3 4 5 <div > {% if not is_index %} <div style ="text-align:center;color: #ccc;font-size:14px;" > --------------------------本文结束<i class ="fa fa-heart" > </i > 感谢您的阅读--------------------------</div > {% endif %} </div >
1 2 # 打开引用文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_macro/post.swig
在以下代码之间
1 2 3 4 5 6 {%- if theme.follow_me %} {{ partial('_partials/post/post-followme.swig', {}, {cache: theme.cache.enable}) }} {%- endif %} <footer class ="post-footer" >
添加以下代码
1 2 3 4 5 6 <div > {% if not is_index %} {% include 'passage-end-tag.swig' %} {% endif %} </div >
1 2 # 打开主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
添加以下代码:
1 2 3 passage_end_tag: enabled: true
2.15侧边栏显示阅读进度
1 2 # 打开主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改部分如下:
我打开之后,好像没有效果,应该是没有显示top
按钮,这里把这个按钮在侧边栏开关打开,修改如下:
2.16修改底部#
标签
1 vim ~/02MyBlog/hexofiles/themes/next/layout/_macro/post.swig
找到如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <footer class ="post-footer" > {%- if post.tags and post.tags.length %} {%- if theme.tag_icon %} {%- set tag_indicate = '<i class ="fa fa-tag" > </i > ' %} {% else %} {%- set tag_indicate = '#' %} {%- endif %} <div class ="post-tags" > {%- for tag in post.tags.toArray() %} <a href ="{{ url_for(tag.path) }}" rel ="tag" > {{ tag_indicate }} {{ tag.name }}</a > {%- endfor %} </div > {%- endif %} {{ partial('_partials/post/post-footer.swig', {}, {cache: theme.cache.enable}) }} {{ post_nav(post) }} </footer >
发现在主题配置文件中打开tag_icon
就可以了。
1 2 # 打开主题配置文件 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改如下:
2.17去掉底部的由Hexo…强力驱动字样
1 2 # 打开相应的文件 vim ~/02MyBlog/hexofiles/themes/next/layout/_partials/footer.swig
找到以下代码,注释掉中间的部分即可。
1 2 3 4 5 6 7 8 9 10 {%- if theme.footer.powered %} {%- endif %}
其实也可以在主题配置文件中将footer
中的powered
设置为false
2.18更换网页顶栏默认图标
我使用的是一个在线图标制作免费软件,这个就是比特虫 ,网址如下:
目标尺寸32x32就可以,然后填写附加码,再生成保存就可以了文件可以直接保存到以下位置。
1 ~/02MyBlog/hexofiles/themes/next/source/images/
1 vim ~/02MyBlog/hexofiles/themes/next/layout/_partials/head/head.swig
找到如下代码:
1 2 3 4 5 6 {%- if theme.favicon.medium %} <link rel ="icon" type ="image/png" sizes ="32x32" href =" {{ url_for(theme.favicon.medium) }}" > {%- endif %} {%- if theme.favicon.small %} <link rel ="icon" type ="image/png" sizes ="16x16" href =" {{ url_for(theme.favicon.small) }}" > {%- endif %}
可以看到,这里有两种图标大小,由判断条件theme.favicon.medium
可知,在主题配置文件中有相应的地方来设置该参数。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改部分如下:
1 2 3 4 5 6 7 8 9 favicon: small: /images/favicon16.ico medium: /images/favicon32.ico apple_touch_icon: /images/apple-touch-icon-next.png safari_pinned_tab: /images/logo.svg
在站点根目录下执行以下命令:
1 npm install hexo-generator-feed --save
1 vim ~/02MyBlog/hexofiles/_config.yml
修改部分如下(添加plugins: hexo-generate-feed
):
1 2 3 4 5 6 theme: next plugins: hexo-generate-feed
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改部分如下(去掉RSS
的注释):
1 2 3 4 5 6 7 follow_me: RSS: /atom.xml || fa fa-rss
2.20页脚增加网站运行时间统计
1 vim ~/02MyBlog/hexofiles/themes/next/layout/_partials/footer.swig
在适当的位置添加以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <span id ="sitetime" > </span > <script language =javascript > function siteTime ( ) { window .setTimeout("siteTime()" , 1000 ); var seconds = 1000 ; var minutes = seconds * 60 ; var hours = minutes * 60 ; var days = hours * 24 ; var years = days * 365 ; var today = new Date (); var todayYear = today.getFullYear(); var todayMonth = today.getMonth()+1 ; var todayDate = today.getDate(); var todayHour = today.getHours(); var todayMinute = today.getMinutes(); var todaySecond = today.getSeconds(); /* Date .UTC() -- 返回date对象距世界标准时间(UTC)1970 年1 月1 日午夜之间的毫秒数(时间戳) year - 作为date对象的年份,为4位年份值 month - 0-11之间的整数,做为date对象的月份 day - 1-31之间的整数,做为date对象的天数 hours - 0(午夜24点)-23之间的整数,做为date对象的小时数 minutes - 0-59之间的整数,做为date对象的分钟数 seconds - 0-59之间的整数,做为date对象的秒数 microseconds - 0-999之间的整数,做为date对象的毫秒数 */ var t1 = Date .UTC(2020 ,02 ,13 ,15 ,00 ,00 ); var t2 = Date .UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond); var diff = t2-t1; var diffYears = Math .floor(diff/years); var diffDays = Math .floor((diff/days)-diffYears*365 ); var diffHours = Math .floor((diff-(diffYears*365 +diffDays)*days)/hours); var diffMinutes = Math .floor((diff-(diffYears*365 +diffDays)*days-diffHours*hours)/minutes); var diffSeconds = Math .floor((diff-(diffYears*365 +diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds); document .getElementById("sitetime" ).innerHTML=" 已安全运行" +diffDays+" 天 " +diffHours+" 小时 " +diffMinutes+" 分钟 " +diffSeconds+" 秒" ; } siteTime(); </script >
2.21添加音乐播放器
1 npm install hexo-tag-aplayer --save
1 vim ~/02MyBlog/hexofiles/themes/next/layout/_layout.swig
添加以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <link rel ="stylesheet" href ="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css" > <script src ="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js" > </script > <script src ="https://cdn.jsdelivr.net/npm/meting@1.2.0/dist/Meting.min.js" > </script > <div class ="aplayer" data-id ="7274703654" data-server ="tencent" data-type ="playlist" data-fixed ="true" data-autoplay ="true" data-order ="random" data-volume ="0.55" data-theme ="#cc543a" data-preload ="auto" > </div >
这里支持不同的音乐平台,id
就是自己歌单地址中的那一串数字。
选项
默认值
描述
id
必须值
歌曲 id / 播放列表 id / 相册 id / 搜索关键字
server
必须值
音乐平台: netease
, tencent
, kugou
, xiami
, baidu
type
必须值
song
, playlist
, album
, search
, artist
fixed
false
开启固定模式
mini
false
开启迷你模式
loop
all
列表循环模式:all
, one
,none
order
list
列表播放模式: list
, random
volume
0.7
播放器音量
lrctype
0
歌词格式类型
listfolded
false
指定音乐播放列表是否折叠
storagename
metingjs
LocalStorage 中存储播放器设定的键名
autoplay
true
自动播放,移动端浏览器暂时不支持此功能
mutex
true
该选项开启时,如果同页面有其他 aplayer 播放,该播放器会暂停
listmaxheight
340px
播放列表的最大长度
preload
auto
音乐文件预载入模式,可选项: none
, metadata
, auto
theme
#ad7a86
播放器风格色彩设置
1 vim ~/02MyBlog/hexofiles/_config.yml
添加以下代码:
该插件可以使站点进行跳转的时候不继续播放(这里要注意,主题根目录中的.gitignore
文件中忽略了所有的扩展包,如果不想重新下载,就可以修改文件,将其也添加到版本库中)。
1 2 3 4 # 进入主题文件夹根目录 cd ~/02MyBlog/hexofiles/themes/next # 下载插件源码 git clone https://github.com/theme-next/theme-next-pjax source/lib/pjax
修改主题配置文件,打开pjax
。
1 vim ~/02MyBlog/hexofiles/themes/next/_config.yml
修改如下:
3.站点设置 站点的一些配置参数如下
参数
描述
title
网站标题
subtitle
网站副标题
description
网站描述
keywords
网站的关键词。支援多个关键词。
author
名字
language
网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans
和 zh-CN
。
timezone
网站时区。Hexo 默认使用电脑的时区。请参考 时区列表 进行设置,如 America/New_York
, Japan
, 和 UTC
。一般的,对于中国大陆地区可以使用 Asia/Shanghai
。
3.1设置中文显示 目前 NexT 支持的语言如以下表格所示:
语言
代码
设定示例
English
en
language: en
简体中文
zh-Hans
language: zh-CN
Français
fr-FR
language: fr-FR
Português
pt
language: pt
or language: pt-BR
繁體中文
zh-hk
或者 zh-tw
language: zh-hk
Русский язык
ru
language: ru
Deutsch
de
language: de
日本語
ja
language: ja
Indonesian
id
language: id
Korean
ko
language: ko
编辑 站点配置文件,将 language
设置成你需要的语言。
1 vim ~/02MyBlog/hexofiles/_config.yml
修改如下
1 2 3 4 5 6 7 8 title: 一世繁华 subtitle: 记录点点滴滴 description: 选择远方,便只顾风雨兼程 keywords: author: qidaink language: zh-CN timezone: Asia/Shanghai
3.2持久化链接 使用Hexo后,默认的链接是http://url/年/月/日/hello-world
这种类型的,这是由年/月/日/标题组成。如果调整过日期会变化,另外标题是中文或存在特殊符号的时候这样的链接可能就有问题。
1 npm install hexo-abbrlink --save
1 vim ~/02MyBlog/hexofiles/_config.yml
添加修改如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 url: http://example.com root: / permalink: post/:abbrlink.html abbrlink: alg: crc32 rep: hex permalink_defaults: pretty_urls: trailing_index: true trailing_html: true
3.3开启代码高亮 编辑站点配置文件
1 vim ~/02MyBlog/hexofiles/_config.yml
修改部分如下,文字自动检测默认不启动,所以改成true
使其起作用。
1 2 3 4 5 6 7 highlight: enable: true line_number: true auto_detect: true tab_replace: '' wrap: true hljs: false
3.4图片延迟加载 访问到图片的时候才会去请求图片资源,可以提高博客的访问速度。
在站点根目录下执行以下命令:
1 npm install hexo-lazyload-image --save
1 vim ~/02MyBlog/hexofiles/_config.yml
增加内容如下:
1 2 3 4 5 lazyload: enable: true onlypost: false loadingImg:
onlypost
:是否仅文章中的图片做懒加载, 如果为 false, 则主题中的其他图片, 也会做懒加载, 如头像, logo 等任何图片.
loadingImg
:图片未加载时的代替图.