Links

01 网站动态标题的两种方式

现今不少个人博客喜欢用动态网站标题来卖萌,为小站增添几分生趣,如友邻梓喵出没,甚至一些商业网站如饿了么也借此效果来提高用户粘性,故此探究下网站的动态标题的几种实现方式。

Window 对象

浏览器 Window 对象有 onbluronfocus 两个方法,分别表示焦点从当前窗口移开和选中,通过这两个方法可以简单设置动态标题。代码如下:
const title = {
focus: "蝉鸣如雨",
blur: "花宵道中",
}
window.onblur = () => (document.title = title.blur)
window.onfocus = () => (document.title = title.focus)
通过判断当前窗口的焦点状态来设置标题,多数网站的动态标题都是用的这个方法。

Page Visibility API

Page Visibility API 可以获取一个网页是可见或点击选中的状态,用户使用切换标签的方式来浏览网页时,API 会发送一个关于当前页面的可见信息的事件 visibilitychange,可以通过监听页面可见状态来实现动态标题,目前主流浏览器都支持此 API。
Can I use Page Visibility API
Page Visibility API 有如下两个属性:
  • document.hidden:如果页面处于被认为是对用户隐藏状态时返回 true,否则返回 false。
  • document.visibilityState:一个用来展示文档可见性状态的字符串。可能的值有:
    • visible:页面内容至少部分可见。
    • hidden:页面内容对用户不可见。
    • prerender:页面内容正在被预渲染且对用户是不可见的。
    • unloaded:页面正在从内存中卸载。
所以使用 Page Visibility API 可以简单实现网站动态标题:
const title = {
focus: "蝉鸣如雨",
blur: "花宵道中",
}
handleVisibilityChange = () => {
if (document.hidden) {
document.title = title.blur
} else {
document.title = title.focus
}
}
document.addEventListener("visibilitychange", handleVisibilityChange, false)
应当注意的是当浏览器最小化时,不会触发 visibilitychange 事件,也不会设置 hidden 为 true。