效果展示
此教程会向Solitude提交pr,可以升级主题的人可以等待主题更新,不可以升级主题的可以直接照着魔改
之前已经写过一个教程了,是关于鱼鱼的主题实现的,这次换成Solitude主题之后重新写一个,属于是老活老整了,两篇文章相似度高答99.9%
此教程是为Solitude主题的专项教程,其余Butterfly系主题代码相似,但不完全相同,可自行修改后食用
安知鱼主题的可以参照这篇文章
Butterfly魔改:侧边栏添加个性时钟,添加一个数字个性时钟
创建[themes]/source/js/custom/digit-clock.js文件,在其中添加如下内容:
js
var _time10 = Array.from(Array(10)).map((n, i) => i);
var _time6 = _time10.slice(0, 6);
var _time3 = _time10.slice(0, 3);
var _Structure = [
[_time3, _time10],
[_time6, _time10],
[_time6, _time10]
];
var clock = document.createElement('div');
clock.id = 'clock';
document.getElementById("card-digit-clock").appendChild(clock);
var digitGroups = [];
requestAnimationFrame(update);
_Structure.forEach(digits => {
var digitGroup = document.createElement('div');
digitGroup.classList.add('digit-group');
clock.appendChild(digitGroup);
digitGroups.push(digitGroup);
digits.forEach(digitList => {
var digit = document.createElement('div');
digit.classList.add('digit');
digitList.forEach(n => {
var ele = document.createElement('div');
ele.classList.add('digit-number');
ele.innerText = n;
digit.appendChild(ele);
});
digitGroup.appendChild(digit);
});
});
function update() {
requestAnimationFrame(update);
var date = new Date();
var time = [date.getHours(), date.getMinutes(), date.getSeconds()].
map(n => `0${n}`.slice(-2).split('').map(e => +e)).
reduce((p, n) => p.concat(n), []);
time.forEach((n, i) => {
var digit = digitGroups[Math.floor(i * 0.5)].children[i % 2].children;
Array.from(digit).forEach((e, i2) => e.classList[i2 === n ? 'add' : 'remove']('bright'));
});
}
创建[themes]/source/css/custom/digit-clock.css文件,在其中添加如下内容:
css
#card-digit-clock {
display: flex;
justify-content: center;
align-items: center;
}
#clock {
font-size: 10px;
position: relative;
}
.digit-group {
display: inline-block;
}
.digit-group:not(:last-child):after {
color: inherit;
content: ":";
font-size: 50px;
}
.digit {
display: inline-block;
width: 33px;
}
.digit .digit-number {
color: inherit;
transform: rotate(-90deg);
transition: font-size 200ms,transform 350ms,color 150ms;
}
.digit .digit-number.bright {
color: inherit;
font-size: 25px;
transform: rotate(0deg);
}
创建侧边栏卡片,在source/_data目录下新建一个aside.yml文件,内容如下:
yml
- name: digit-clock
title:
class: card-digit-clock
id: card-digit-clock
icon:
content_class:
content_id:
content_html: "<script defer async pjax src='/js/custom/digit-clock.js'></script>"
假如你有很多的卡片需要排序,那么你就设置一下content_id来进行排序。
此时你的页面上还不会显示出你的时钟,打开主题设置,在约150行的位置,修改如下:
yml
aside:
home:
noSticky: "about,digit-clock"
Sticky: "allInfo"
post:
noSticky: "about,digit-clock"
Sticky: "newestPost"
page:
noSticky: "about,digit-clock"
Sticky: "newestPost,allInfo"
此处,我在首页,文章页,页面上都设置显示数字时钟,你可以按需修改(此处非完整代码,请勿直接替换)
假如你是刚迈入魔改的人,你可能需要将css引入,修改themes\solitude\source\css\index.styl文件,在任意一行添加
styl
@import 'custom/*.css'
假如你使用gulp压缩资源,可能会导致无法运行,修改gulpfile.js(我这里是使用的空梦的gulp):
js
gulp.task('minify-js', () =>
gulp.src(['./public/**/*.js','!./public/**/digit-clock.js'])
.pipe(terser({
compress: {
sequences: 50,
unsafe: true,
unsafe_math: true,
pure_getters: true,
ecma: true
}
}))
.pipe(gulp.dest('./public'))
)
我们可以在gulp.src中添加一个!./public/path/to/your/file.js来排除某个文件。这意味着 Gulp 将会处理./public/**/*.js匹配的所有文件,除了./public/path/to/your/file.js。