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 交通频道 作文范文 鳌江-长汀南 林东-古鲁满汗 南昌西-徐闻 宜昌东-东乡 乳山-青州市 葫芦岛北-德惠西 旬阳-广州北 蓝村-绥中 一面坡-鞍山 霍州-武昌 中寨-宜良北 武昌-秦皇岛 昆明-三家寨 景德镇-定南 海石湾-武山 小河沿-四合 新李-长农 富源-雨格 上海南-襄阳 泗水-衡水 兴国-进贤 拉鲊-迤资 免渡河-赤峰 翠岗-松树林 萨拉齐-淄博 五营-莲江口 上海南-柳州 熊岳城-清河门 沧州西-缙云西 株洲-祁东 唐山北-敦化 许昌-乌鲁木齐 郭尔奔敖包-土牧尔台 向阳川-新友谊 新民-平遥 常州-苏州 长春-泰州 无锡-德阳 北屯-福山口 邵东-长沙南 碧州-保康 肥东-丹阳北 镇赉-齐齐哈尔 倭肯-宝林 统军庄-承德 东元庆-南陈铺 辛集-凤州 牙屯堡-广州 开封-巩义 四平东-大庆西 余姚北-漳州 宁波-葫芦岛 建宁县北-石柱县 新松浦-昌图 合肥南-岳阳东 徐州东-福州 邯郸-信阳 乌鲁木齐南-中卫 东胜西-兖州 西安-宁东 杭州东-建瓯西 卧里屯-新彦 西岭口-长虹 石门县北-长春 鹰手营子-密云北 东莞东-上饶 南湾子-洞庙河 上海南-抚宁 长春-帽儿山 太原-交城 大庆东-铁岭 太平庄-四合 抚顺北-玉田县 毛告吐-通辽 乌海-长春 伊宁-乌鲁木齐 高碑店东-芷江 公主岭南-徐州东 大英东-苏州 达州-长春 安吉到广德太极洞坐车需要多久?
邯郸有到河南信阳鸡公山的旅行团吗?
海口火车列车站买票的问题
从静海到河北区三号路怎么坐车
盐城哪个汽车站离火车站进?
无锡天一大饭店到火车列车站打车的话要多少钱
镇江到南通汽车票价多少啊
商丘到周口汽车客车票价格
从城阳怎么去青岛电子学校南校?很重要谢谢
江门车站去广西车票是票价多少钱
从长春列车火车站到吉林省孤儿职业学校怎么走
从乌鲁木齐到海南公路怎么坐车
德州到聊城的火车列车时刻表谁知道啊要准确的
从泗塘新村到南京西路338号天安中心怎么做车子比较方便.
六盘水到佛山列车火车车皮发煤600吨要多少运费?
从昆明坐长途汽车到乐山市犍为县道那里买票
11号晚上8点到成都双流机场,不想过夜,去重庆怎么坐车最好当
从菏泽到张家口有多少公里啊,我要怎么去啊
请问从青岛城阳汽车客车北站到青岛市28中怎么走急用,万分感谢
求8月17号从韶关至深圳的列车班次及价格……跪求谢谢急
想知道: 全国 从广州市到鞍山市开车怎么坐车,需要过路费,加油
上海到青岛一日游 有哪些好玩的旅游地方
江西庐山东林寺
中通快递能到曲阜的济宁学院吗
本科毕业到重庆找工作
在火车列车上有东西忘拿了怎么办
从大石桥到北京再到新疆的火车列车票有吗啥时候的
桂林到株洲炎车票价钱数
元朝为什么把大一统的首都定在金朝的中都,而不是宋朝的临安呢?
湖南益阳会计从业资格考试2010报名地点

Copyright © 2016 phpStudy |