本博客当前使用的插件总结
Version
Hexo 5.2.0
NexT 8.0.1
这几天将博客主题从 NexT-7.7.0 升级到了 8.0.1,在重新安装插件的时候顺便记录了本博客当前使用的插件
鼠标点击特效
下面是四个比较常用的鼠标点击特效脚本,我们可以把它们放置在 source/js/cursor/
目录下:
- 礼花特效代码:
1 | class Circle { |
- 爆炸特效代码:
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=.1,a.alpha=.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:.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)} ; |
- 浮出爱心特效代码:
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 | var a_idx = 0; |
然后我们在主题自定义布局文件 source/_data/body-end.njk
中添加以下代码:
1 | {# 鼠标点击特效 #} |
主题配置文件中 custom_file_path
需开启 bodyEnd: source/_data/body-end.njk
配置
然后我们在主题配置文件中添加以下代码:
1 | # mouse click effect: fireworks | explosion | love | text |
这样即可在配置文件中一键快速切换鼠标点击特效。
简体繁体一键切换
简体繁体切换的基本原理:首先建立一个简体字与繁体字相对应的映射表,然后遍历整个界面,把相应的简体字或者是繁体字映射为对应的字体即可。
- 首先,我们创建
source/js/tw_cn.js
文件:
1 | var defaultEncoding = 2; // 网站默认语言,1: 繁體中文, 2: 简体中文 |
- 修改模板,在我们想要显示简繁转换按钮的地方添加如下代码。例如,我在主题自定义布局文件
source/_data/footer.njk
中添加以下代码:
1 | <div class="translate-style"> |
主题配置文件中 custom_file_path
需开启 footer: source/_data/footer.njk
配置
读者可以在博客底部点击简体 / 繁体来看具体的切换字体效果。
canvas 粒子时钟
- 在
source/_data/sidebar.njk
添加内容如下:
1 | <div style=""> |
主题配置文件中 custom_file_path
需开启 sidebar: source/_data/sidebar.njk
配置
- 在
source/_data/styles.styl
添加:
1 | // 粒子时钟样式 |
主题配置文件中 custom_file_path
需开启 style: source/_data/styles.styl
配置
在文章结尾添加本文结束标志
在 source/_data/post-body-end.njk
添加:
1 | <div> |
主题配置文件中 custom_file_path
需开启 postBodyEnd: source/_data/post-body-end.njk
配置
然后我们在主题配置文件中添加以下代码:
1 | # 文章末尾添加“本文结束”标记 |
代码块折叠
- 新建内建标签 fold:我们可以在项目根目录下新建
scripts/tags
文件夹(即scripts/tags/
),新建fold_tag.js
:
1 | /* global hexo */ |
- 创建
source/js/fold_action.js
:
1 | $(document).ready(function(){ |
- 我们在
source/_data/body-end.njk
文件中添加如下代码:
1 | {# 代码块折叠 #} |
主题配置文件中 custom_file_path
需开启 postBodyEnd: source/_data/post-body-end.njk
配置
- 最后,修改
source/_data/style.styl
配置风格:
1 | // 代码折叠功能添加 |
主题配置文件中 custom_file_path
需开启 style: source/_data/styles.styl
配置
- 使用方法:
1 | {% fold 点击显/隐内容 %} |