文档:visibilitychange 事件

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

visibilitychange 事件在文档上触发时,表示其选项卡的内容已变得可见或已被隐藏。

该事件不可取消。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("visibilitychange", (event) => { })

onvisibilitychange = (event) => { }

事件类型

一个通用的 Event

用法说明

该事件不包含文档的更新后的可见性状态,但你可以从文档的 visibilityState 属性中获取该信息。

当用户导航到新页面、切换选项卡、关闭选项卡、最小化或关闭浏览器,或者在移动设备上从浏览器切换到其他应用程序时,此事件会以 hiddenvisibilityState 触发。转换为 hidden 是页面上最后一个可可靠观察到的事件,因此开发者应将其视为用户会话可能已结束(例如,用于 发送分析数据)。

转换为 hidden 也是页面可以停止进行 UI 更新并停止用户不想在后台运行的任何任务的一个好时机。

示例

在转换为 hidden 时暂停音乐

此示例在页面隐藏时暂停播放音频,并在页面再次可见时恢复播放。有关完整示例,请参阅 Page Visibility API:页面隐藏时暂停音频 文档。

js
document.addEventListener("visibilitychange", () => {
  if (document.hidden) {
    playingOnHide = !audio.paused;
    audio.pause();
  } else if (playingOnHide) {
    // Resume playing if audio was "playing on hide"
    audio.play();
  }
});

在转换为 hidden 时发送会话结束分析

此示例将转换为 hidden 视为用户会话的结束,并使用 Navigator.sendBeacon() API 发送适当的分析数据。

js
document.onvisibilitychange = () => {
  if (document.visibilityState === "hidden") {
    navigator.sendBeacon("/log", analyticsData);
  }
};

规范

规范
HTML
# event-visibilitychange
HTML
# handler-onvisibilitychange

浏览器兼容性

另见