HTML5 visibilityState属性详细介绍和使用实例


Posted in HTML / CSS onMay 03, 2014

这里必须解释一下,这个“激活”,指的是这个标签是否正被用户浏览,或者说是否为当前标签。

那么,这个 API 究竟有些什么用途呢?通常,很多传统的页面在用户没有激活它的时候,它还会继续工作,例如,当用户正在浏览新闻门户,而他之前打开的 NBA 球赛页面会继续刷新获取最新结果,视频网站会继续占用带宽加载资源,于是,如果这类不必要的工作太多了,就会造成很多的资源浪费。因此,这货相当有用:

1.Web 程序每隔一段时间会自动更新页面信息,确保用户获取到及时的信息,但是,当用户正在浏览其他页面时,可以控制它暂停更新。
2.视频网站在播放在线视频时会不断加载视频,直到视频加载完毕,但是,当用户正在浏览其他页面时,可以暂停加载视频资源,节省带宽。
3.网站首页上有个大幻灯自动播放,当用户浏览其他页面了,就可以暂停播放。

于是,通过 Page Visibility ,我们可以至少达到以下一种或几种的好处:

1.节省服务器资源,Ajax 轮询这类服务器资源占用常常会被忽略,关闭这种请求可以节省资源。
2.节省内存消耗。
3.节省带宽消耗。

因此,使用 Page Visibility 无论是对于用户还是服务器都有好处。

接下来正式介绍一下这个 API 。Page Visibility 会在浏览器的 document 对象上添加两个属性 hidden 和 visibilityState 。如果当前的标签被激活了,那么 document.hidden 的值为 false ,否则为 true 。visibilityState 则有4个可能值:

1.hidden:当浏览器最小化、切换标签、电脑锁屏时 visibilityState 值是 hidden
2.visible:当浏览器最顶级上下文(context)的 document 至少显示在一个屏幕当中时,返回 visible;当浏览器窗口没有最小化,但是浏览器被其他应用遮挡时,这时也为 visible
3.prerender:当文档被加载到屏幕画面以外或者不可见时返回 prerender,这个是非必要属性,浏览器可选择性的支持。
4.unloaded:当文档将要被离开 ( unload ) 时返回 unloaded,浏览器也可选择性的支持这个属性

另外,document 上会添加 visibilitychange 事件,当 document 的可见性改变时触发该事件。

好了,介绍完属性,放上一个使用实例(复制代码保存到一个HTML文件,打开后切换标签即可测试效果)。

复制代码
代码如下:

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>测试 HTML5 Page Visibility API</title>
</head>
<body></p> <p> <div id="showTip"></div>
<script>
function browerKernel(){
var result;
['webkit', 'moz', 'o', 'ms'].forEach(function(prefix){</p> <p> if( typeof document[ prefix + 'Hidden' ] != 'undefined' ){
result = prefix;
}
});
return result;
}
function init(){
prefix = browerKernel();
var showTip = document.getElementById('showTip');
document.addEventListener( prefix + 'visibilitychange', function onVisibilityChange(e){
var tip = null;
if( document[ prefix + 'VisibilityState' ] == 'hidden' ) tip = '<p>离开页面</p>';
else if( document[ prefix + 'VisibilityState' ] == 'visible' ) tip = '<p>进入页面</p>';
showTip.innerHTML = showTip.innerHTML + tip;
});
}
window.onload = init();
</script>
</body>
</html>

这个实例的作用是监听标签的可见性是否改变 ,并且在标签可见性发生改变时产生提示。

值得注意的是,在目前,浏览器对于 Page Visibility 的支持还是通过私有属性支持,因此在检测或利用 Page Visibility 提供的属性时需要加上浏览器私有前缀,例如在 Chrome 中检测上面的 visibilityState 属性时,就需要检测 document.webkitVisibilityState 而不是 document.visibilityState 。所以,Demo 中会首先检测浏览器类型,然后才使用 Page Visibility 的 API 。

HTML / CSS 相关文章推荐
css3绘制天猫logo实现代码
Nov 06 HTML / CSS
css3实现背景颜色渐变让图片不再是唯一的实现方式
Dec 18 HTML / CSS
CSS去掉A标签(链接)虚线框的方法
Apr 01 HTML / CSS
CSS3 按钮边框动画的实现
Nov 12 HTML / CSS
HTML5 语义化结构化规范化
Oct 17 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
Jun 09 HTML / CSS
html5 worker 实例(二) 图片变换效果
Jun 24 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
Jun 23 HTML / CSS
Html5 audio标签样式的修改
Jan 28 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
Jan 18 HTML / CSS
html form表单基础入门案例讲解
Jul 15 HTML / CSS
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
Aug 23 HTML / CSS
HTML5中判断用户是否正在浏览页面的方法
May 03 #HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
May 03 #HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
May 03 #HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
Apr 29 #HTML / CSS
HTML5中5个简单实用的API
Apr 28 #HTML / CSS
会走动的图形html5时钟示例
Apr 27 #HTML / CSS
html5定位并在百度地图上显示的示例
Apr 27 #HTML / CSS
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php递归实现无限分类的方法
2015/07/28 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
非常好的js代码
2006/06/27 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
document.getElementById介绍
2011/09/13 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
python实现爬取图书封面
2018/07/05 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
什么是岗位职责
2013/11/12 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
一年级语文教学反思
2014/02/13 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015年安全生产责任书
2015/01/30 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书