通过 document.hidden 与 visibilitychange 事件判断网页可见性和操作
小程序的应用的生命周期很完美了,网页就不太理想了,不过我们可以通过相关的函数去实现类似的功能,最常见的就是在观看视频的时候,如果用户切换了标签或者是打开了其他应用程序,我们可以暂停视频的播放,当用户回来的时候,我们再继续播放。
页面的展示的状态的判断就需要用到 HTML5 新增的API:document.hidden。
- document.hidden 属性:boolean类型,表示页面是否处于隐藏状态。页面隐藏包括页面在后台标签页或者浏览器最小化。
- visibilitychange 事件:当文档的可见性改变时触发。
于是我们就这样编写代码了:
var hidden, visibilityChange; if (typeof document.hidden !== "undefined") { hidden = "hidden"; visibilityChange = "visibilitychange"; } else if (typeof document.mozHidden !== "undefined") { hidden = "mozHidden"; visibilityChange = "mozvisibilitychange"; } else if (typeof document.msHidden !== "undefined") { hidden = "msHidden"; visibilityChange = "msvisibilitychange"; } else if (typeof document.webkitHidden !== "undefined") { hidden = "webkitHidden"; visibilityChange = "webkitvisibilitychange"; } // 添加监听器 document.addEventListener(visibilityChange, function() { console.log("当前页面是否被隐藏:" + document[hidden]); }, false);
上面的代码在 PC 上运行没什么问题,但是在 手机 QQ 浏览器 上就没啥效果了,因为手机 QQ 浏览器的网页永远都不会被挂起,所以 visibilitychange
事件不会被触发。
手机 QQ 浏览器为了解决这个问题向开发者提供了一个叫 qbrowserVisibilityChange
的事件:https://open.mobile.qq.com/api/common/index#api:qbrowserVisibilityChange
能过这个事件可以监听手机 QQ 浏览器是否被挂起(注意我这里说的是手机 QQ 浏览器是否被挂,不是说手机 QQ 浏览器的网页被挂起)。如果按照腾讯提供 API ,那么调用 qbrowserVisibilityChange
方法如下:
document.addEventListener("qbrowserVisibilityChange", function(e){ if(e.hidden) { // 手Q被挂起 } else { // 手Q被呼起 } });
微信是支持 visibilitychange 事件的,这也就是说微信被挂起时,微信的内嵌页面也会被挂起,可以使用以下方法来监听微信网页的挂起状态:
ocument.addEventListener("qbrowserVisibilityChange", function(e){ var evt = document.createEvent("HTMLEvents"); evt.initEvent("visibilitychange", false, false); evt.hidden = e.hidden; document.dispatchEvent(evt); }, true); document.addEventListener("visibilitychange", function(e) { e.hidden = e.hidden === undefined ? document.hidden : e.hidden; }, true);
在业务代码直接引用下面的代码:
document.addEventListener("visibilitychange", function(e) { text.innerHTML = e.hidden; if(e.hidden) { // 网页被挂起 } else { // 网页被呼起 } });
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论