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


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

那么,这个 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 。



相关阅读:
MySQL数据库防止人为误操作的实例讲解
Win8自带杀毒软件Defender阻止修改hosts文件的解决方法
JavaScript声明变量名的语法规则
Android开发入门之Service用法分析
Android开发中那些需要注意的坑
Afianl框架里面的FinalBitmap加载网络图片
实现WordPress主题侧边栏切换功能的PHP脚本详解
jQuery模仿阿里云购买服务器选择购买时间长度的代码
解析php框架codeigniter中如何使用框架的session
微软警告:7月29日之前不要尝试全新安装Win10
用table表格来调整表单控件的格式让它好看一些
PHP屏蔽过滤指定关键字的方法
javascript无刷新评论实现方法
苹果Mac系统怎么同时打开多个Finder标签页?
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 我的梦想参赛作文2篇 中国重点大学 2014关于小学生寒假读书笔记:读《夏洛的网》有感 中学2014-2014年度第二学期初三年级组工作总结_教学工作总结 国庆节欢天喜地的祝福语 努力追 我有一双翅膀作文300字 市总工会竞争上岗演讲稿 视线作文700字 演讲稿的格式和范文 小学五年级作文2800字:天使去了天堂 那一刻、幸福曾路过 寂寞半夏 小兔秋秋和苹果树 初中初一作文400字:我们班的女生 英语教研组年终工作总结 新农村建设理事会工作职责 我的8岁生日作文800字 她们的婚姻,我们的故事 热门公务员入党申请书范文2014最新 多少楼台烟雨中(文、又见炊烟) 落爱乍暖 给职场青年的十句警言 初中初三作文400字:故乡的田地 大学生实习报告模版 有你们的支持真好作文 你一定要比我幸福(14)作文800字 汤姆的眼珠会掉下来 寻、、、 读作文900字 碟想世恋作文100字 银行女职员三八节演讲稿 中国大陆女演员李沁经典语录 夏夜听蝼蛄吟唱 我最爱的书作文250字 小石头的经历作文600字 快乐不依赖获得,快乐是一种技巧 西域传奇读后感 七年级暑假作业答案2014 圣诞节给孩子的祝福语 三四年级体育行进间运球单元教案(人教课标版) 小学五年级作文1000字:母爱无声 国庆节300字作文感想 向犹太人借钱的故事,犹太人的聪明 城镇环境整治工作会议讲话 浅谈我国中小企业竞争力论文 公司领导在半年工作总结表彰大会上的发言 仿《童年的水墨画》200字作文 美丽的水长城 第一次的比赛

Copyright © 2016 phpStudy |