需求

在浏览器中播放视频,当用户进行页面切换操作时。需要根据视频播放页是否处于可见状态,来控制视频的暂停及重新播放。

相关文档

参考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状态及变化监听的更多相关文章

  1. Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序

    问题1:ORA-12154: TNS: 无法解析指定的连接标识符 在一台服务器上部署了Oracle客户端,使用IP/SID的方式访问,老是报ORA-12154错误,而使用tnsnames访问却没有问题 ...

  2. Vue中使用computed与watch结合实现数据变化监听

    目的:当数据变化时,为其中重要数据增加边框,实现闪烁以达到提醒目的.数据格式如下,只有在未处理火警/故障时增加闪烁边框.可以使用watch进行深度监听.数据格式已定,也非常明确要监听的数据是有两个.既 ...

  3. 在EditText中限制输入,自定义样式,监听输入的字符,自动换行

    自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...

  4. angular5 路由变化监听

    1.路由监听 //监听路由变化this.router.events .filter(event => event instanceof NavigationEnd) .map(() => ...

  5. FocusChange-焦点变化监听事件

    想要监听一个控件的焦点变化情况,发现了一个 view.setOnFocusChangeListener(new OnFocusChangeListener() { ...... } 现在写一个小dem ...

  6. Vue中计算属性(computed)和监听属性函数watch的比较

    1.计算属性适用的情形我们可能会有这样的需求,一个数据属性在它所依赖的属性发生变化时,也要发生变化,这种情况下,我们最好使用计算属性.例如在下面这个例子中,如果我们使用监听函数,代码就会变得有点冗余. ...

  7. DVA框架统一处理所有页面的loading状态

    dva 有一个管理 effects 执行的 hook,并基于此封装了 dva-loading 插件.通过这个插件,我们可以不必一遍遍地写 showLoading 和 hideLoading,当发起请求 ...

  8. android中 检查网络连接状态的变化,无网络时跳转到设置界面

    1:在AndroidManifest.xml中加一个声明 <receiver android:name="NetCheckReceiver">    <inten ...

  9. Android系统中应用的安装和卸载的监听

    一.创建一个类继承BroadcastReceiver并且复写onReceive的方法 public class AppStateReceiver extends BroadcastReceiver { ...

随机推荐

  1. ajax--->简单加法小练习

    ajax--->简单加法小练习 index.HTML <!DOCTYPE html> <html lang="en"> <head> &l ...

  2. python批量处理

    # -*- coding: utf-8 -*- """ Created on Sat Jun 20 19:36:34 2015 @author: chaofn " ...

  3. 使用socket搭建一个网络聊天室

    #服务器端import socket import threading #创建一个TCP端 sock = socket.socket(socket.AF_INET, socket.SOCK_STREA ...

  4. 【Java学习笔记之七】java函数的语法规则总结

    函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. ...

  5. [51nod1676]无向图同构

    如果一个无向图重标号后与另一个无向图完全一致(即对于任意两点,他们之间的边在两个图中都存在或都不存在),则称两个无向图同构. 给定两个n个点m条边的无向图,判定两个无向图是否同构.不超过20组数据,n ...

  6. Let the Balloon Rise(水)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 Let the Balloon Rise Time Limit: 2000/1000 MS (J ...

  7. 爬 NationalData ,虽然可以直接下,但还是爬一下吧

    爬取的是分省月度数据,2017年的,包括:居民消费价格指数,食品烟酒类居民消费价格指数,衣着类居民消费价格指数,居住类居民消费价格指数,生活用品及服务类居民消费价格指数,交通和通信类居民消费价格指数, ...

  8. 全国银行列表json格式

    var list=[ { value:'CDB', text:'国家开发银行' }, { value:'ICBC', text:'中国工商银行' }, { value:'ABC', text:'中国农 ...

  9. 如何控制input框!

    ENTER键可以让光标移到下一个输入框  只能是中文   屏蔽输入法   只能输入英文和数字   只能是数字 只能显示,不能修改 只能输数字,判断按键的值 function   onlyNum() { ...

  10. 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性

    大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参 ...