站点离开提示

  • ~2.10K 字
  1. 1. 配置说明
    1. 1.1. 引入的新文件
    2. 1.2. 更新的配置项

配置说明

引入的新文件

请将下述文件放置于 source 目录中的合适位置,并根据您的需要调整对应的配置参数。在此处我们使用的是 effects 目录。

leave-event.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
(() => {
// 配置部分
const leaveDelay = 30; // 触发事件的延迟,单位为秒
const leaveFavicon = null; // 触发事件后的图标路径,设置为 null 表示不替换图标
const leaveTitle = "{{{(>_<)}}}哦哟,崩溃啦~"; // 触发事件后的标题
const returnTitle = "(*´∇`*)欸,又好啦~"; // 回归之后的标题

// 代码部分
let originTitle = "";
const saveTitle = () => {
originTitle = document.title;
};

let inactiveTimeout = null;
const siteFavicon = document.querySelector('[rel="icon"]');
const originFaviconUrl = siteFavicon.getAttribute("href");
document.addEventListener("visibilitychange", (ev) => {
if (ev.target.hidden) {
// 触发离开事件,开始计时
inactiveTimeout = setTimeout(() => {
document.title = leaveTitle;
if (leaveFavicon) {
siteFavicon.setAttribute("href", leaveFavicon);
}
inactiveTimeout = null;
}, leaveDelay * 1000);
} else {
// 触发回归事件
if (inactiveTimeout !== null) {
// 还在计时,(假装)无事发生
clearTimeout(inactiveTimeout);
inactiveTimeout = null;
} else {
// 回归了,庆祝一下
document.title = returnTitle;
if (leaveFavicon) {
siteFavicon.setAttribute("href", originFaviconUrl);
}

// 稍等一等再把标题改回来
setTimeout(() => {
document.title = originTitle;
}, 2000);
}
}
});


// 保存标题
saveTitle();
// 在 PJAX 之后再保存标题
window.addEventListener('pjax:complete', saveTitle);
})();

更新的配置项

需要更新 additional_injections加入以下内容:

1
2
3
additional_injections:
after_footer: |
<script src="/effects/leave-event.js"></script>

假设您把上述的文件放置在 source 目录的 effect 目录中,且您的站点配置为根目录模式,那么您应当可以通过上述的路径 /effect/leave-event.js 访问到对应的文件。如果您使用的是其他配置,您需要对应调整这个路径。

当您配置完成后重启 Hexo ,您应当可以看见效果生效。

分享内容
扫描此处的二维码即可分享。