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的transition和animation的用法实例介绍
Aug 20 HTML / CSS
CSS超出文本指定宽度用省略号代替和文本不换行
May 05 HTML / CSS
使用CSS3的font-face字体嵌入样式的方法讲解
May 13 HTML / CSS
使用CSS3制作一个简单的进度条(demo)
May 23 HTML / CSS
css3遮罩层镂空效果的多种实现方法
May 11 HTML / CSS
HTML5本地存储之Database Storage应用介绍
Jan 06 HTML / CSS
简单html5代码获取地理位置
Mar 31 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
Mar 14 HTML / CSS
浅谈h5自定义audio(问题及解决)
Aug 19 HTML / CSS
HTML5 实现图片上传预处理功能
Feb 06 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
Apr 20 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
Jan 05 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
星际实力自我测试
2020/03/04 星际争霸
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
php创建类并调用的实例方法
2019/09/25 PHP
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
JS常用知识点整理
2017/01/21 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python占用的内存优化教程
2019/07/28 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
财务主管自我鉴定
2014/01/17 职场文书
工作疏忽检讨书
2014/01/25 职场文书
活动总结范文
2014/08/30 职场文书
教育合作协议范本
2014/10/17 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书