浏览器中页面的visibility状态及变化监听
需求
在浏览器中播放视频,当用户进行页面切换操作时。需要根据视频播放页是否处于可见状态,来控制视频的暂停及重新播放。
相关文档
参考MDN中,关于页面的可见性相关的API说明。https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
示例代码
html部分
<video width="800" height="100">
<source src="myvideo.mp4" type="video/mp4"></source>
</video>
javascript部分
var pageVisibility = {
hiddenProp: '',
eventType: '',
isVisible: function() {
// 获取到的是不可见的状态值,所以这里需要否才是可见的状态值;
return !document[this.hiddenProp];
},
init: function(handelEvent) {
if(typeof document.hidden !== 'undefined') {
this.hiddenProp = 'hidden';
this.eventType = 'visibilitychange';
} else if(typeof document.msHidden !== 'undefined') {
this.hiddenProp = 'msHidden';
this.eventType = 'msvisibilitychange';
} else if(typeof document.webkitHidden !== 'undefined') {
this.hiddenProp = 'webkitHidden';
this.eventType = 'webkitvisibilitychange';
}
if(this.hiddenProp) {
this.bindEvent(handelEvent);
}
},
bindEvent: function() {
document.addEventListener(this.eventType, this.handleEvent.bind(this), false);
}
};
var handleVideoPlay = function(element) {
if(pageVisibility.isVisible()) {
element.play();
} else {
element.pause();
}
};
var videoElem = document.querySelector('video');
pageVisibility.init(function() {
handleVideoPlay(videoElem);
});
兼容性
兼容性的问题,直接在https://caniuse.com/#search=visibility查询,参考搜索结果中的 Page Visibility 部分。
浏览器中页面的visibility状态及变化监听的更多相关文章
- Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序
问题1:ORA-12154: TNS: 无法解析指定的连接标识符 在一台服务器上部署了Oracle客户端,使用IP/SID的方式访问,老是报ORA-12154错误,而使用tnsnames访问却没有问题 ...
- Vue中使用computed与watch结合实现数据变化监听
目的:当数据变化时,为其中重要数据增加边框,实现闪烁以达到提醒目的.数据格式如下,只有在未处理火警/故障时增加闪烁边框.可以使用watch进行深度监听.数据格式已定,也非常明确要监听的数据是有两个.既 ...
- 在EditText中限制输入,自定义样式,监听输入的字符,自动换行
自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...
- angular5 路由变化监听
1.路由监听 //监听路由变化this.router.events .filter(event => event instanceof NavigationEnd) .map(() => ...
- FocusChange-焦点变化监听事件
想要监听一个控件的焦点变化情况,发现了一个 view.setOnFocusChangeListener(new OnFocusChangeListener() { ...... } 现在写一个小dem ...
- Vue中计算属性(computed)和监听属性函数watch的比较
1.计算属性适用的情形我们可能会有这样的需求,一个数据属性在它所依赖的属性发生变化时,也要发生变化,这种情况下,我们最好使用计算属性.例如在下面这个例子中,如果我们使用监听函数,代码就会变得有点冗余. ...
- DVA框架统一处理所有页面的loading状态
dva 有一个管理 effects 执行的 hook,并基于此封装了 dva-loading 插件.通过这个插件,我们可以不必一遍遍地写 showLoading 和 hideLoading,当发起请求 ...
- android中 检查网络连接状态的变化,无网络时跳转到设置界面
1:在AndroidManifest.xml中加一个声明 <receiver android:name="NetCheckReceiver"> <inten ...
- Android系统中应用的安装和卸载的监听
一.创建一个类继承BroadcastReceiver并且复写onReceive的方法 public class AppStateReceiver extends BroadcastReceiver { ...
随机推荐
- ajax--->简单加法小练习
ajax--->简单加法小练习 index.HTML <!DOCTYPE html> <html lang="en"> <head> &l ...
- python批量处理
# -*- coding: utf-8 -*- """ Created on Sat Jun 20 19:36:34 2015 @author: chaofn " ...
- 使用socket搭建一个网络聊天室
#服务器端import socket import threading #创建一个TCP端 sock = socket.socket(socket.AF_INET, socket.SOCK_STREA ...
- 【Java学习笔记之七】java函数的语法规则总结
函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. ...
- [51nod1676]无向图同构
如果一个无向图重标号后与另一个无向图完全一致(即对于任意两点,他们之间的边在两个图中都存在或都不存在),则称两个无向图同构. 给定两个n个点m条边的无向图,判定两个无向图是否同构.不超过20组数据,n ...
- Let the Balloon Rise(水)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 Let the Balloon Rise Time Limit: 2000/1000 MS (J ...
- 爬 NationalData ,虽然可以直接下,但还是爬一下吧
爬取的是分省月度数据,2017年的,包括:居民消费价格指数,食品烟酒类居民消费价格指数,衣着类居民消费价格指数,居住类居民消费价格指数,生活用品及服务类居民消费价格指数,交通和通信类居民消费价格指数, ...
- 全国银行列表json格式
var list=[ { value:'CDB', text:'国家开发银行' }, { value:'ICBC', text:'中国工商银行' }, { value:'ABC', text:'中国农 ...
- 如何控制input框!
ENTER键可以让光标移到下一个输入框 只能是中文 屏蔽输入法 只能输入英文和数字 只能是数字 只能显示,不能修改 只能输数字,判断按键的值 function onlyNum() { ...
- 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参 ...