next主题:https://github.com/theme-next/hexo-theme-next
博客根目录下安装:
## 本地搜索插件
$ npm install hexo-generator-searchdb --save
主题根目录下安装:
## 图片弹出效果
$ git clone https://github.com/theme-next/theme-next-fancybox3 source/lib/fancybox
## 顶部加载条
$ git clone https://github.com/theme-next/theme-next-pace source/lib/pace
前提准备
- 参考主题配置文件
config.yml
,
1 | # Define custom file paths. |
- 根据需要,创建对应文件,并在主题配置文件
config.yml
去掉注释。
头像效果设置
修改头像样式(默认方形)
- 打开主题配置文件
config.yml
,设置头像url或圆形头像旋转效果
1 | # Sidebar Avatar |
设置头像动态特效
- 头像动态效果可在 https://daneden.github.io/animate.css/ 选择css样式:
- 打开
source/_data/head.swig
,末尾添加以下内容:
1 | <link href="//cdn.bootcss.com/animate.css/3.5.0/animate.min.css" rel="stylesheet"> |
- 打开source/_data/styles.styl
,添加以下内容:
1 | // 头像动态效果 |
点击头像跳转到首页
- 修改
themes\next\layout\_partials\sidebar\site-overview.swig
文件
1 | <a href="/" ><img class="site-author-image" itemprop="image" alt="{{ author }}" |
添加站内搜索
- Next集成了站内搜索功能,博客根目录下安装:
$ npm install hexo-generator-searchdb --save
- 打开主题配置文件
config.yml
1 | # Local Search |
图片弹出效果
参考 https://github.com/theme-next/theme-next-fancybox3
- 进入next主题目录下,安装
theme-next-fancybox3
$ git clone https://github.com/theme-next/theme-next-fancybox3 source/lib/fancybox
- 打开主题配置文件
config.yml
1 | # FancyBox is a tool that offers a nice and elegant way to add zooming functionality for images. |
添加Valine评论系统
- 打开主题配置文件
config.yml
,查询最新 https://www.jsdelivr.com/package/npm/valine 。
1 | ...... |
鼠标点击特效四种
选项配置
- 在主题配置文件
config.yml
中添加
1 | cursor_effect: |
- 新建
themes\next\layout\custom.swig
文件
1 | {% if theme.cursor_effect %} |
- 在
themes\next\layout\layout.swig
文件中添加
1 | ...... |
点击桃心效果
- 新建
themes\next\source\js\cursor\love.min.js
下文件
1 | ! function(e, t, a) { |
点击礼花效果
- 新建
themes\next\source\js\cursor\fireworks.js
下文件
1 | class Circle { |
点击爆炸效果
- 新建
themes\next\source\js\cursor\explosion.min.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\source\js\cursor\text.js
文件
1 | var a_idx = 0; |
评论打字特效
- 打开主题配置文件
config.yml
,添加以下内容:
1 | # typing effect |
- 打开
themes\next\layout\custom.swig
文件,如果没有,则新建。
1 | {# 打字特效 #} |
- 新建
themes\next\source\js\cursor\activate-power-mode.min.js
文件
1 | (function webpackUniversalModuleDefinition(root,factory){if(typeof exports==='object'&&typeof module==='object')module.exports=factory();else if(typeof define==='function'&&define.amd)define([],factory);else if(typeof exports==='object')exports["POWERMODE"]=factory();else root["POWERMODE"]=factory()})(this,function(){return(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={exports:{},id:moduleId,loaded:false};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.p="";return __webpack_require__(0)})([function(module,exports,__webpack_require__){'use strict';var canvas=document.createElement('canvas');canvas.width=window.innerWidth;canvas.height=window.innerHeight;canvas.style.cssText='position:fixed;top:0;left:0;pointer-events:none;z-index:999999';window.addEventListener('resize',function(){canvas.width=window.innerWidth;canvas.height=window.innerHeight});document.body.appendChild(canvas);var context=canvas.getContext('2d');var particles=[];var particlePointer=0;POWERMODE.shake=true;function getRandom(min,max){return Math.random()*(max-min)+min}function getColor(el){if(POWERMODE.colorful){var u=getRandom(0,360);return'hsla('+getRandom(u-10,u+10)+', 100%, '+getRandom(50,80)+'%, '+1+')'}else{return window.getComputedStyle(el).color}}function getCaret(){var el=document.activeElement;var bcr;if(el.tagName==='TEXTAREA'||(el.tagName==='INPUT'&&el.getAttribute('type')==='text')){var offset=__webpack_require__(1)(el,el.selectionStart);bcr=el.getBoundingClientRect();return{x:offset.left+bcr.left,y:offset.top+bcr.top,color:getColor(el)}}var selection=window.getSelection();if(selection.rangeCount){var range=selection.getRangeAt(0);var startNode=range.startContainer;if(startNode.nodeType===document.TEXT_NODE){startNode=startNode.parentNode}bcr=range.getBoundingClientRect();return{x:bcr.left,y:bcr.top,color:getColor(startNode)}}return{x:0,y:0,color:'transparent'}}function createParticle(x,y,color){return{x:x,y:y,alpha:1,color:color,velocity:{x:-1+Math.random()*2,y:-3.5+Math.random()*2}}}function POWERMODE(){{var caret=getCaret();var numParticles=5+Math.round(Math.random()*10);while(numParticles--){particles[particlePointer]=createParticle(caret.x,caret.y,caret.color);particlePointer=(particlePointer+1)%500}}{if(POWERMODE.shake){var intensity=1+2*Math.random();var x=intensity*(Math.random()>0.5?-1:1);var y=intensity*(Math.random()>0.5?-1:1);document.body.style.marginLeft=x+'px';document.body.style.marginTop=y+'px';setTimeout(function(){document.body.style.marginLeft='';document.body.style.marginTop=''},75)}}};POWERMODE.colorful=false;function loop(){requestAnimationFrame(loop);context.clearRect(0,0,canvas.width,canvas.height);for(var i=0;i<particles.length;++i){var particle=particles[i];if(particle.alpha<=0.1)continue;particle.velocity.y+=0.075;particle.x+=particle.velocity.x;particle.y+=particle.velocity.y;particle.alpha*=0.96;context.globalAlpha=particle.alpha;context.fillStyle=particle.color;context.fillRect(Math.round(particle.x-1.5),Math.round(particle.y-1.5),3,3)}}requestAnimationFrame(loop);module.exports=POWERMODE},function(module,exports){(function(){var properties=['direction','boxSizing','width','height','overflowX','overflowY','borderTopWidth','borderRightWidth','borderBottomWidth','borderLeftWidth','borderStyle','paddingTop','paddingRight','paddingBottom','paddingLeft','fontStyle','fontVariant','fontWeight','fontStretch','fontSize','fontSizeAdjust','lineHeight','fontFamily','textAlign','textTransform','textIndent','textDecoration','letterSpacing','wordSpacing','tabSize','MozTabSize'];var isFirefox=window.mozInnerScreenX!=null;function getCaretCoordinates(element,position,options){var debug=options&&options.debug||false;if(debug){var el=document.querySelector('#input-textarea-caret-position-mirror-div');if(el){el.parentNode.removeChild(el)}}var div=document.createElement('div');div.id='input-textarea-caret-position-mirror-div';document.body.appendChild(div);var style=div.style;var computed=window.getComputedStyle?getComputedStyle(element):element.currentStyle;style.whiteSpace='pre-wrap';if(element.nodeName!=='INPUT')style.wordWrap='break-word';style.position='absolute';if(!debug)style.visibility='hidden';properties.forEach(function(prop){style[prop]=computed[prop]});if(isFirefox){if(element.scrollHeight>parseInt(computed.height))style.overflowY='scroll'}else{style.overflow='hidden'}div.textContent=element.value.substring(0,position);if(element.nodeName==='INPUT')div.textContent=div.textContent.replace(/\s/g,"\u00a0");var span=document.createElement('span');span.textContent=element.value.substring(position)||'.';div.appendChild(span);var coordinates={top:span.offsetTop+parseInt(computed['borderTopWidth']),left:span.offsetLeft+parseInt(computed['borderLeftWidth'])};if(debug){span.style.backgroundColor='#aaa'}else{document.body.removeChild(div)}return coordinates}if(typeof module!="undefined"&&typeof module.exports!="undefined"){module.exports=getCaretCoordinates}else{window.getCaretCoordinates=getCaretCoordinates}}())}])}); |
修改链接样式
- 打开
source/_data/styles.styl
,添加以下内容:
1 | ...... |
修改字体(提高网页加载速度)
- 打开主题配置文件
config.yml
,更换为中科大字体镜像源,设置全局字体大小
1 | font: |
底部跳动的心
- 修改主题配置文件
config.yml
1 | # Icon between year and copyright info. |
添加加载条
在Next主题根目录下安装 theme-next-pace
$ git clone https://github.com/theme-next/theme-next-pace source/lib/pace
- 修改Next主题配置文件
config.yml
1 | ...... |
文章底部的标签样式
- 打开source/_data/styles.styl
,添加以下内容:
1 | /*文章底部标签样式*/ |
其它标签页修改可参考Hexo NexT主题之自定义标签页,有彩色标签页、球形标签页、心形标签页等样式。
网站 logo 炫彩效果
我使用的是 NexT 5 的 Pisces(主题 _config.yml 中 scheme 配置),主要设置样式为 site-meta,其它的主题类型需要自己调整。
- 打开
source/_data/styles.styl
,添加以下内容:
1 | // 网站 logo 炫彩效果 |
背景图片
主题背景图片
- 打开
source/_data/styles.styl
,添加以下内容:
1 | //背景 |
动态背景
动态线条 canvas_nest
- 主题目录下运行以下命令
$ git clone https://github.com/theme-next/theme-next-canvas-nest source/lib/canvas-nest
- 修改主题配置文件
config.yml
,当然也可以使用CDN。
1 | # 动态线条 |
动态彩带 canvas_ribbon
- 主题目录下运行以下命令
$ git clone https://github.com/theme-next/theme-next-canvas-ribbon source/lib/canvas-ribbon
- 修改主题配置文件
config.yml
,当然也可以使用CDN。
1 | # 动态彩带 |
Tree 三维特效
提供three_waves
、canvas_lines
、canvas_sphere
三种特效。
- 主题目录下运行以下命令
$ git clone https://github.com/theme-next/theme-next-three source/lib/three
- 修改主题配置文件
config.yml
,当然也可以使用CDN。
1 | # 三维动效 |
返回顶部图标
猫
- 打开
source/_data/styles.styl
,添加以下内容:
1 | //返回顶部 猫 |
有趣小插件
每日一言
放在合适位置即可
- 中文版
<script type="text/javascript" src="https://api.uixsj.cn/hitokoto/w.php?code=js"></script><div id="xsjhitokoto"><script>xsjhitokoto()</script></div>
- 中英文版
<script type="text/javascript" src="https://api.uixsj.cn/hitokoto/en.php?code=js"></script><div id="enhitokoto"><script>enhitokoto()</script></div>
天气预报
<iframe scrolling="no" src="https://tianqiapi.com/api.php?style=tx&skin=sogou" frameborder="0" width="100%" height="30" allowtransparency="true"></iframe>
每日必应图片
<img src="https://api.uixsj.cn/bing/bing.php" width="300px" height="auto">
地球仪显示访客位置(RevolverMaps)插件
<script type="text/javascript" src="//rf.revolvermaps.com/0/0/5.js?i=5b3ac4cx0nk&m=0&c=ff0000&cr1=ffffff" async="async"></script>
彩色标签云
- 修改主题配置文件
config.yml
。
1 | # 标签云 |
添加文本结束
通常样式
- 新建
themes\next\layout\_macro\passage-end-tag.swig
文件
1 | <div> |
- 打开
themes\next\layout\_macro\post.swig
文件,添加以下内容。
1 | <div> |
- 打开主题配置文件
config.yml
,添加以下内容。
1 | #文章末尾添加“本文结束”标记 |
进一步美化
图片存放路径
themes\next\source\images\css_pattern_bottom.png
修改
themes\next\layout\_macro\passage-end-tag.swig
文件
1 | <div> |
- 打开
source/_data/styles.styl
,添加以下内容:
1 | //添加文本结束 |
搞怪网页标题
- 打开主题配置文件
config.yml
,添加以下内容:
1 | # a trick on website title |
- 打开
themes\next\layout\custom.swig
文件,如果没有,则新建。
1 | {# 搞怪网页标题 #} |