
【Hugo】博客引入页面加载动画
1 写轮眼加载动画
这边先介绍如何引入本博客的加载动画,直接复制就能实现,适用于代码二次开发能力不强的用户
“授人以鱼不如授人以渔",后面会教大家如何引入自己想要的加载动画
1.1 基本引入
将以下代码复制进
layouts/partials/head/custom.html
(文件不存在则自行创建)
@keyframes spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.spinner {
border: 4px solid rgba(0, 0, 0, 0.1);
width: 36px;
height: 36px;
border-radius: 50%;
border-left-color: #09f;
animation: spinner 1s linear infinite;
}
1.2 动画首次加载
每次切换页面都播放一次加载动画,这种看个人喜欢。
我个人是不太喜欢的,我只希望第一次打开这页面的时候加载一下就好
1.2.1 PJAX
如果你博客引入了PJAX功能,基本是不会出现这情况了。因为页头页脚一般不是PJAX会刷新的地方,所以页面切换时不会重复执行加载动画脚本
想了解PJAX可以去查看【Hugo】PJAX实现无刷新加载页面
<style>
.loading {
...
display: none;
}
</style>
(2) 修改initLoading方法
<script>
function initLoading() {
const isFirstVisit = !sessionStorage.getItem('visited');
if (isFirstVisit) {
let loading = document.querySelector(".loading");
loading.style.display = "flex";
document.addEventListener('DOMContentLoaded', function() {
// 执行加载完成动画
loadFinish();
// 延迟1.5s,待加载完成动画执行结束
setTimeout(() => {
loading.style.display = "none";
}, 1500)
sessionStorage.setItem('visited', 'true');
});
}
}
</script>
(3) 这样就只有首次进入此网站时才播放加载动画,页面关闭后重新进入才再次播放加载动画
2 自定义加载动画
2.1 基本引入
(1) 前往UIverse,寻找自己喜欢的加载动画
(2) 将加载动画的html,css分别复制到下面的模板,然后将模板内容复制到
layouts/partials/head/custom.html
<div class="loading">
<!-- html内容 -->
</div>
<style>
.loading {
position: fixed;
display: flex;
justify-content: center;
align-items: center;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 99;
background-color: #f5f5fa;
}
/* css内容 */
</style>
<script>
function initLoading() {
let loading = document.querySelector(".loading");
document.addEventListener('DOMContentLoaded', function() {
// 本地页面加载速度快,可自行使用setTimeout()来进行延迟,体验加载动画效果
loading.style.display = "none";
});
}
initLoading();
</script>
这样就能实现最基本的加载动画效果
2.2 样式修改
因为每个人的加载动画都不一致,这边只分享一下可能会用到的css样式,实际情况还需自己自行适配
也可以参考上面的写轮眼动画的写法,来模仿写法
CSS样式
/**
* 可能会用到的CSS
*/
{
/* 整体修改元素大小(大于1放大, 小于1缩小) */
zoom: 1.0;
/* 开始动画播放 */
animation-play-state: running;
/* 暂停动画播放 */
animation-play-state: paused;
/* 元素居中(flex布局) */
display: flex;
justify-content: center;
align-items: center;
/* 元素隐藏 */
display: none;
/* 定义动画 */
@keyframes 动画名 {
0% {}
进度% {}
100% {}
}
/* 执行动画 */
animation: 动画名 时间;
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gw