anzhiyu主题一图流
anzhiyu主题一图流
John Doeanzhiyu主题一图流
摘要
这篇文章介绍了如何使用anzhiyu主题的一图流教程,包括新建js和css文件、引入文件、配置懒加载和图片方法等。文章还提供了一些链接和代码示例,讲解如何进行配置和修改。通过这些步骤,可以实现主题的一图流效果和优化加载背景的效果。文章还介绍了如何美化首页背景图和实现自适应切换。读者可以根据自身需求自行调整代码。
教程
新建js
新建文件source/js/imgloaded.js
新增以下内容,并按照注释调整照片路径
1 | // 首页一图流加载优化 |
新建css
新建文件source/css/custom.css
新增以下内容,并按照注释自行决定调整内容
1 | /* 首页头图加载 */ |
在这个css中我稍微添加了几行代码使主题的页脚底部和文章更多的位置进行了透明,可以跟据自己的喜好选择是否修改
引入文件
在
_config.anzhiyu.yml
主题配置文件下inject
配置项中head
和bottom处
分别引入
custom.css
和imgloaded.js
文件
1 | inject: |
在安知鱼主题中可以直接把head
中的取消注释在bottom
中引入js
就好了,如果是其他文件夹就把herf
的路径修改一下就好了
配置懒加载
在_config.anzhiyu.yml
中修改懒加载lazyload
将field
修改为psot
1 | lazyload: |
配置图片的方法
我们需要在_config.anzhiyu.yml
中的index_img
进行修改
1 | # The banner image of home page |
注意在url()
的括号中不需要进行填写地址,图片会由js进行渲染
修改图片的地址在imgloaded.js
中进行修改
1 | const ldconfig = { |
按照代码中的注释进行修改就好了,在配置完成后hexo三连就能看到效果了
页脚与头图透明
1.在[BlogRoot]\source
文件夹下新建一个文件夹css
,该文件夹用于存放自定义的css样式
,再新建一个名为custom.css
,在里面写入以下代码:
1 | /* 页脚与头图透明 */ |
2.在主题配置文件[BlogRoot]\_config.butterfly.yml
文件中的inject
配置项的head
子项加入以下代码,代表引入刚刚创建的custom.css
文件(这是相对路径的写法)
1 | inject: |
星空背景和流星特效
1.在 [Blogroot]\themes\source\js\
目录下新建 universe.js
输入:
1 | function dark() {window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;var n,e,i,h,t=.05,s=document.getElementById("universe"),o=!0,a="180,184,240",r="226,225,142",d="226,225,224",c=[];function f(){n=window.innerWidth,e=window.innerHeight,i=.216*n,s.setAttribute("width",n),s.setAttribute("height",e)}function u(){h.clearRect(0,0,n,e);for(var t=c.length,i=0;i<t;i++){var s=c[i];s.move(),s.fadeIn(),s.fadeOut(),s.draw()}}function y(){this.reset=function(){this.giant=m(3),this.comet=!this.giant&&!o&&m(10),this.x=l(0,n-10),this.y=l(0,e),this.r=l(1.1,2.6),this.dx=l(t,6*t)+(this.comet+1-1)*t*l(50,120)+2*t,this.dy=-l(t,6*t)-(this.comet+1-1)*t*l(50,120),this.fadingOut=null,this.fadingIn=!0,this.opacity=0,this.opacityTresh=l(.2,1-.4*(this.comet+1-1)),this.do=l(5e-4,.002)+.001*(this.comet+1-1)},this.fadeIn=function(){this.fadingIn&&(this.fadingIn=!(this.opacity>this.opacityTresh),this.opacity+=this.do)},this.fadeOut=function(){this.fadingOut&&(this.fadingOut=!(this.opacity<0),this.opacity-=this.do/2,(this.x>n||this.y<0)&&(this.fadingOut=!1,this.reset()))},this.draw=function(){if(h.beginPath(),this.giant)h.fillStyle="rgba("+a+","+this.opacity+")",h.arc(this.x,this.y,2,0,2*Math.PI,!1);else if(this.comet){h.fillStyle="rgba("+d+","+this.opacity+")",h.arc(this.x,this.y,1.5,0,2*Math.PI,!1);for(var t=0;t<30;t++)h.fillStyle="rgba("+d+","+(this.opacity-this.opacity/20*t)+")",h.rect(this.x-this.dx/4*t,this.y-this.dy/4*t-2,2,2),h.fill()}else h.fillStyle="rgba("+r+","+this.opacity+")",h.rect(this.x,this.y,this.r,this.r);h.closePath(),h.fill()},this.move=function(){this.x+=this.dx,this.y+=this.dy,!1===this.fadingOut&&this.reset(),(this.x>n-n/4||this.y<0)&&(this.fadingOut=!0)},setTimeout(function(){o=!1},50)}function m(t){return Math.floor(1e3*Math.random())+1<10*t}function l(t,i){return Math.random()*(i-t)+t}f(),window.addEventListener("resize",f,!1),function(){h=s.getContext("2d");for(var t=0;t<i;t++)c[t]=new y,c[t].reset();u()}(),function t(){document.getElementsByTagName('html')[0].getAttribute('data-theme')=='dark'&&u(),window.requestAnimationFrame(t)}()}; |
2.在[Blogroot]\themes\source\css\
目录下新建 universe.css
输入:
1 | /* 背景宇宙星光 */ |
3.在 [Blogroot]\_config.butterfly.yml
的 inject
配置项中bottom
下填入:
1 | inject: |
4.在 [Blogroot]\_config.butterfly.yml
的 inject
配置项中 head
下填入:
1 | inject: |
昼夜转换动画
1.新建 [Blogroot]\themes\butterfly\layout\includes\custom\sun_moon.pug
, 这部分其实实质上就是一个 svg
文件,通过 js
操作它的旋转显隐,淡入淡出实现动画效果。
1 | svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0') |
2.新建 [Blogroot]\themes\butterfly\source\css\layout\sun_moon.styl
:
1 | .Cuteen_DarkSky, |
3.新建 [Blogroot]\themes\butterfly\source\js\sun_moon.js
, 去除了冗余代码,去 jquery
:
1 | function switchNightMode() { |
4.修改 [Blogroot]\themes\butterfly\layout\includes\head.pug
, 在文件末位加上一行:
1 | //- global config |
5.修改 [Blogroot]\themes\butterfly\layout\includes\rightside.pug
, 把原本的昼夜切换按钮替换掉:
1 | when 'translate' |
6.修改 [Blogroot]_config.butterfly.yml
, 引入一下 js
:
1 | inject: |
7.重启项目并切换夜间模式即可看见效果
1 | hexo cl; hexo s |
昼夜转换动画2.0
逛博客看见别人的切换动画有月亮,而且颜色也很好看,于是一顿f12操作下大概看懂原理,再结合现在的动画改进一下就是了。(注意:在做本魔改前,请先完成店长的夜间模式切换动画,同时最好也要有引入Vue+Element弹窗。本动画是基于店长的样式改进的,加入了弯月,切换到夜间模式是太阳变月亮,切换到白天模式是月亮变太阳,同时背景颜色也改为了我喜欢的。)
1.替换原来的[BlogRoot]\source\js\sun_moon.js
为以下代码,这里主要改进是由原来的after
遮罩换为两个元素,再通过定时器来控制各自元素的透明度达到绘制太阳和月亮的目的:
1 | function switchNightMode() { |
2.替换原来的[BlogRoot]\themes\butterfly\source\css\_layout\sun_moon.styl
为以下代码,主要改变是的绘制太阳和月亮的矢量信息,还有背景颜色改进:
1 | .Cuteen_DarkSky, |
3.重启项目并切换夜间模式即可看到效果:
1 | hexo cl; hexo s |
配置手机PC页面白天黑夜共四个背景图
1.首先是PC端的白天黑夜双背景,修改[BlogRoot]\themes\butterfly\layout\includes\layout.pug
1 | + - var DefaultBg = page.defaultbg ? page.defaultbg : theme.background.default |
2.再是实现手机端的白天黑夜双背景,在[BlogRoot]\themes\butterfly\source\css\_layout
目录下新建一个web-bg.styl
文件,写入以下内容:
1 | $web-bg-night = hexo-config('background.darkmode') ? unquote(hexo-config('background.darkmode')) : $web-bg |
3.然后还要修改一下[BlogRoot]\themes\butterfly\source\css\var.styl
,大约35行
的位置
1 | $text-line-height = 2 |
4.再修改一下配置项,在[BlogRoot]/_config.butterfly.yml
中找到background
配置项,内容改为:
1 | # Website Background (設置網站背景) |
5.当开了Pjax,还要再把#web_bg加到pjax选择器中。修改[BlogRoot]\themes\butterfly\layout\includes\third-party\pjax.pug
1 | script(src=url_for(theme.CDN.pjax)) |