好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTML5实现页面切换激活的PageVisibility API使用初探

HT ML 5 推出了一个很[特别]的 API Page Visibil IT y ,之所以说它特别,是因为这个 API 关注的是一个很少人留意的功能 —— 浏览器标签( tab ) 是否 被激活。这里必须解释一下,这个[激活],指的是这个标签是否正被用户浏览, 或者 说是否为当前标签。

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

Web 程序每隔一段时间会自动更新页面信息,确保用户获取到及时的信息,但是,当用户正在浏览其他页面时,可以控制它 暂停 更新。
视频网站在播放在线视频时会 不断 加载视频,直到视频加载完毕,但是,当用户正在浏览其他页面时,可以暂停加载视频资源, 节省 带 宽 。
网站首页上有个大幻灯自动播放,当用户浏览其他页面了,就可以暂停播放。
于是,通过 Page Visibility ,我们可以至少达到以下一种或 几种 的好处:

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

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

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

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

好了,介绍完属性,放上一个 Demo (打开后切换标签即可测试)。

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

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

JavaScript Code 复制内容到剪贴板

function &nbs p; br owerKernel(){              VAR  result;             [ 'webkit' ,  'moz' ,  'o' ,  'ms' ].for each ( function (prefix){                  if (  ty PE of  document[ prefix +  'Hidden'  ] !=  'un define d'  ){                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();      

再再来看一个具体的例子,代码如下:

JavaScript Code 复制内容到剪贴板

<!DOCTYPE HTML>        <html>        <head>             <script type= "text/javascript" >                  timer = 0;                   function  onLoad(){                       document.addEventListener( "visibilitychange" ,stateChanged);                       document.addEventListener( "webkitvisibilitychange" , stateChanged);                       document.addEventListener( " ;m svisibilitychange" , stateChanged);                  }                   function  stateChanged(){                       console. LOG (document.webkitVisibilityState);                        if (document.hidden || document.webkitHidden || document.msHidden){                             //new tab or window minimized                          timer =  new  Date().getTime();                       }                        else  {                            alert( 'You were away for '  + ( new  Date().getTime() -t imer)/1000+  ' seconds.' )                       }                  }             </script>        </head>        <body onLoad= "onLoad()" >        </body>        </html>    

在上面的代码中,同样,在C hr OME运行下,在LOAD事件中,监听了相关的 webkitvisibilitychange事件(这个在CHROME下),如果是IE 10,则是 msvisibilitychange事件,然后在回调函数中, 开始 了计算用户在页面停留的时间, 所以当你打开其他TAB页或者最小化后,再切换回 原来 这个页,则会JAVASCRIPT 弹出显示:你离开了页面多长时间 。
要注意的是,在CHROME中,属性命名为webkitHidden,事件为 webkitvisibilitychange事件,而在IE 10中,属性为msHidden 和 msVisibilityState.

总结

以上是 为你收集整理的 HTML5实现页面切换激活的PageVisibility API使用初探 全部内容,希望文章能够帮你解决 HTML5实现页面切换激活的PageVisibility API使用初探 所遇到的问题。

如果觉得 网站内容还不错, 推荐好友。

查看更多关于HTML5实现页面切换激活的PageVisibility API使用初探的详细内容...

  阅读:17次