Hexo搭建与Next8.02主题设置(一)
之前搭建博客并没有记录,借着这次博客的版本升级记录一下搭建过程,本地环境为Windows10,VPS为centos Linux系统,主题使用的为Next,样式选择的是Gemini。
安装 Git和node.js
因为本地是Windows系统,这两个软件直接下载,图形化界面安装即可,这里不做介绍。
安装Hexo
上面两个软件安装完成后,即可在命令页面使用以下命令安装:
1 | npm install -g hexo-cli |
本地部署Hexo
1.在本地建立一个文件夹,名字随便,例如:blog
2.在命令行执行命令,初始化博客。
1 | hexo init blog // blog为你建立的文件夹 |
启动
在本地运行博客
1 | hexo server |
本地访问http://127.0.0.1:4000,即可看到博客页面。
更改主题为Next
hexo的主题还挺多的,看了一圈,个人比较喜欢next主题,所以接下来便是针对next的更改,自己是个小白,只能做一点简单的改动。
下载next主题
1 | cd blog // 博客的根目录 |
切换主题
打开博客根目录下_config.yml文件,找到 theme:
1 | theme: next |
设置语言
打开博客根目录下_config.yml文件,找到language:
1 | language: zh-CN |
更改next主题布局
打开主题next目录的_config.yml,搜索Scheme。
1 | # Schemes |
去掉Gemini前面的“#”即可。
首页显示文章摘要
直接在文章中你想截断的位置写入下面语句
<!--more-->
菜单栏
打开主题next目录的_config.yml,搜索menu。
1 | menu: |
按需取消注释。
生成标签、分类、关于页面
在命令行博客根目录分别执行下面命令。
1 | hexo new tags |
在博客目录/source/_posts/下分别有tags、categories、about三个文件夹,每个文件夹中都有一个index.md文件,接下来分别修改每个文件。
1.标签页
1 | title: 标签 |
2.分类页
1 | title: 分类 |
3.关于页
1 | title: 关于 |
本地搜索
1.安装搜索插件
1 | npm install hexo-generator-searchdb --save |
2.在站点配置文件中添加:
1 | #本地搜索 |
3.在主题配置文件中找到local_search:
1 | local_search: |
设置背景及博客内容透明化
在博客目录/source/新建文件夹_data,新建文件styles.styl。
编辑styles.styl文件,写入以下内容:
1 | // 添加背景图片 |
在主题配置文件中搜索custom_file_path:字段,取消注释。
1 | - # style: source/_data/styles.styl |
打字特效,鼠标点击特效
1.打字特效
需要添加下面这个脚本 activate-power-mode.min.js,然后放置在 themes\next\source\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,新建文件body-end.swig。
编辑文件添加以下内容:
1 | {# 打字特效 #} |
2.点击特效。
下面是四个比较常用的鼠标点击特效脚本,我们可以把它们放置在 themes\next\source\js\cursor\ 目录下:
1 | class Circle { |
在博客目录/source/新建文件夹_data,新建文件body-end.swig。
编辑文件添加以下内容:
1 | {# 鼠标点击特效 #} |
在主题配置文件中添加以下代码:
1 | # mouse click effect: fireworks | explosion | love | text |
圆角设置&中文设置
1.圆角设置。
自定义样式文件 variables.styl 中添加:
1 | // 圆角设置 |
然后在主题配置文件中取消 variables.styl 的注释:
1 | custom_file_path: |
2.中文字体设置
修改主题配置文件
1 | font: |
修改配置文件 variables.styl,增加如下代码:
1 | // 中文字体 |
粒子时钟特效
在博客目录/source/_data/,新建文件sidebar.njk,编辑文件添加以下内容。
1 | <div style=""> |
然后在主题配置文件中取消 sidebar.njk 的注释。