最近遇见了一个小问题,就是我们支付的时候,会开启一个轮询的情况,但发现用户 把浏览器切换到后台之后,轮训还是继续,这个就有点交互上的小问题了.
查询了下 浏览器有没有 进入不可见的情况的监听事件,没想到还真有
之前我还一直很纳闷, uniapp 是怎么监听onShow 和 onHide的方法。看了这个事件后,我似乎有些清晰了。
visibilitychange 监听文档的是否可视化。
同时查看浏览器可视化状态是什么
Document.visibilityState 可见性状态
**Document.visibilityState (只读属性), 返回document的可见性, 即当前可见元素的上下文环境. 由此可以知道当前文档(即为页面)是在背后, 或是不可见的隐藏的标签页,或者(正在)预渲染.可用的值如下:
‘visible’ : 此时页面内容至少是部分可见. 即此页面在前景标签页中,并且窗口没有最小化.
‘hidden’ : 此时页面对用户不可见. 即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 ‘锁屏状态’ .
‘prerender’ : 页面此时正在渲染中, 因此是不可见的 (considered hidden for purposes of document.hidden). 文档只能从此状态开始,永远不能从其他值变为此状态.注意: 浏览器支持是可选的.
当此属性的值改变时, 会递交 visibilitychange (en-US) 事件给Document**
document.addEventListener('visibilitychange', () => {
if (document.visibilityState == "visible") {
alert('浏览器进入用户视野中')
} else {
alert('浏览器消失用户视野中')
}
})
这样就可以监听到 用户的浏览器是否切换到后台了。
还有就是其实吧window也可以监听这个事件但是,确保兼容性还是使用document来做监听
在苹果上可能表现的不太一样。这个时候我们像监听的话 其实还可以监听 pagehide方法 和 pageshow的方法
有点问题哈,在谷歌上面这个pagehide并没有生效,但是pageshow是可以,这个以后我再研究研究
window.addEventListener('pagehide', () => {
alert('浏览器消失用户视野中')
})
window.addEventListener('pageshow', () => {
alert('浏览器进入用户视野中')
})
差不多吧。相同的效果
关注我。持续更新 前端知识。