Page Visibility API 提供了可让您了解文档何时可见或隐藏的事件,以及查看页面当前可见性状态的功能。
注意事项:Page Visibility API 对于保存特别有用
资源并通过让页面避免执行来提高性能
当文档不可见时不必要的任务。
当用户最小化窗口或切换到另一个选项卡时,API 会发送一个visibilitychange 事件,让侦听器知道页面状态已更改。您可以检测事件并执行一些操作或表现不同。例如,如果您的 Web 应用正在播放视频,它可以在用户将选项卡置于后台时暂停视频,并在用户返回选项卡时恢复播放。用户不会在视频中失去位置,视频的配乐不会干扰新前景选项卡中的音频,同时用户也不会错过任何视频。
用例
让我们考虑几个 Page Visibility API 的用例。
- 网站的图片轮播不应进入下一张幻灯片,除非用户正在查看该页面
- 显示信息仪表板的应用程序不想在页面不可见时轮询服务器以获取更新
- 页面想要检测它何时被预呈现,以便准确计算页面浏览量
- 网站想要在设备处于待机模式时关闭声音(用户按下电源按钮关闭屏幕)
开发人员历来使用不完善的代理来检测这一点。例如,观察窗口上的模糊和焦点事件可以帮助您知道您的页面何时不是活动页面,但它不会告诉您您的页面实际上对用户隐藏。 Page Visibility API 解决了这个问题。
示例
查看live example(有声视频)。
该示例在您切换到另一个选项卡时暂停视频并在您返回其选项卡时再次播放,它是使用以下代码创建的:
// Set the name of the hidden property and the change event for visibility
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
var videoElement = document.getElementById("videoElement");
// If the page is hidden, pause the video;
// if the page is shown, play the video
function handleVisibilityChange() {
if (document[hidden]) {
videoElement.pause();
} else {
videoElement.play();
}
}
// Warn if the browser doesn't support addEventListener or the Page Visibility API
if (typeof document.addEventListener === "undefined" || hidden === undefined) {
console.log("This demo requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API.");
} else {
// Handle page visibility change
document.addEventListener(visibilityChange, handleVisibilityChange, false);
// When the video pauses, set the title.
// This shows the paused
videoElement.addEventListener("pause", function(){
document.title = 'Paused';
}, false);
// When the video plays, set the title.
videoElement.addEventListener("play", function(){
document.title = 'Playing';
}, false);
}
来源:MDN: Page Visibility API