我们在做项目的时候经常会遇到一些需求,比如在某些页面当点击浏览器刷新 或者关闭的时候会有对应的提示,是否离开或者重新加载此网站。比如csdn写文章的时候就有这个弹窗,这功能就是用onbeforeunload实现的。
注意:如果你加载下面代码的时候你进来的时候点击刷新可能会出现一次,但是点重新加载后,如果下次再进来,你再点击刷新按钮就不会出现该弹窗,原因是因为你页面内容没有发生变化,这个点击重新加载后再点击刷新出现弹窗的条件是你页面内容一样要发生了变化,比如表单重新输入,页面某个元素变化了或者删除了。
代码如下:
window.onbeforeunload = function (e) {
e = e | window.event;
if (e) {
e.returnValue = '关闭提示';
}
return false;
};
浏览器切换其他页面或者最小化的时候触发,(ps: 常用于检测考试作弊行为)
一般来说,我们希望使用 Page Visibility API,在用户没有看到页面时停止不必要的进程,或者执行一些后台操作。可以下面这几种情况:
-
当用户离开页面时,暂停视频、轮播图或动画。
-
停止一些实时获取数据的API
-
发送一些用户信息
-
如何使用它?
Page Visibility API 有两个属性和一个事件来访问页面可见性状态。
document.hidden它是全局可用的,而且是只读的。尽量避免使用它,因为它现在已经被废弃了,但是当被访问时,如果页面是隐藏的,它将返回
true
,如果是可见的,它将返回false
。Document.visibilityState (只读属性)
返回document的可见性,即当前可见元素的上下文环境。由此可以知道当前文档 (即为页面) 是在背后,或是不可见的隐藏的标签页,或者 (正在) 预渲染。可用的值如下:
-
'visible'
: 此时页面内容至少是部分可见。即此页面在前景标签页中,并且窗口没有最小化。 -
'hidden'
: 此时页面对用户不可见。即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 '锁屏状态' -
'prerender'
: 页面此时正在渲染中,因此是不可见的 (considered hidden for purposes of document.hidden). 文档只能从此状态开始,永远不能从其他值变为此状态。 -
visibilitychange
当其选项卡的内容变得可见或被隐藏时,会在文档上触发
visibilitychange
(能见度更改) 事件。 -
document.addEventListener("visibilitychange", () => { if (document.visibilityState === "visible") { // page is visible } else { // page is hidden } });