抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

Hexo Volantis主题副标题以打字效果输出 Hitokoto

步骤

修改 _config.yml

import body_end加入 js 代码

1
<script>const textElement = document.querySelector('.top .subtitle'); let charIndex = 0; let isDeleting = false; let hitokotoText = ''; let typingInterval; const typingSpeed = 180; const deletingSpeed = 100; const delayBetweenCycles = 2500; function typeWriter() { if (isDeleting) { textElement.innerHTML = hitokotoText.slice(0, charIndex--); } else { textElement.innerHTML = hitokotoText.slice(0, ++charIndex); } if (!isDeleting && charIndex === hitokotoText.length) { setTimeout(() => isDeleting = true, delayBetweenCycles); } else if (isDeleting && charIndex === 0) { isDeleting = false; clearInterval(typingInterval); fetchHitokoto(); return; } const speed = isDeleting ? deletingSpeed : typingSpeed; typingInterval = setTimeout(typeWriter, speed); } function fetchHitokoto() { fetch('https://v1.hitokoto.cn').then(response => response.json()).then(data => { hitokotoText = data.hitokoto; charIndex = 0; typeWriter(); }).catch(console.error); } fetchHitokoto();</script>

_config.yml 示例:

1
2
3
import:
body_end:
- "<script>const textElement = document.querySelector('.top .subtitle'); let charIndex = 0; let isDeleting = false; let hitokotoText = ''; let typingInterval; const typingSpeed = 180; const deletingSpeed = 100; const delayBetweenCycles = 2500; function typeWriter() { if (isDeleting) { textElement.innerHTML = hitokotoText.slice(0, charIndex--); } else { textElement.innerHTML = hitokotoText.slice(0, ++charIndex); } if (!isDeleting && charIndex === hitokotoText.length) { setTimeout(() => isDeleting = true, delayBetweenCycles); } else if (isDeleting && charIndex === 0) { isDeleting = false; clearInterval(typingInterval); fetchHitokoto(); return; } const speed = isDeleting ? deletingSpeed : typingSpeed; typingInterval = setTimeout(typeWriter, speed); } function fetchHitokoto() { fetch('https://v1.hitokoto.cn').then(response => response.json()).then(data => { hitokotoText = data.hitokoto; charIndex = 0; typeWriter(); }).catch(console.error); } fetchHitokoto();</script>"

建立或修改 source\_volantis\style.styl

加入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 副标题打字效果
.top .subtitle
position: relative
display: inline-block

.top .subtitle::after
content: '|'
position: absolute
right: -10px
animation: blink 0.8s step-end infinite

@keyframes blink
0%, 50%
opacity: 1
51%, 100%
opacity: 0

修改 _config.volantis.yml

1
2
cover:
subtitle: ":D 获取中..."

评论