首页 > web前端 > H5教程 > 正文

HTML5实现页面切换激活的PageVisibility API使用初探_html5教程技巧

PHP中文网
发布: 2016-05-24 09:01:11
原创
1968人浏览过

html5 推出了一个很“特别”的 api page visibility ,之所以说它特别,是因为这个 api 关注的是一个很少人留意的功能 —— 浏览器标签( tab ) 是否被激活。这里必须解释一下,这个“激活”,指的是这个标签是否正被用户浏览,或者说是否为当前标签。

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

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

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

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

立即学习前端免费学习笔记(深入)”;

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

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

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

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

BlessAI
BlessAI

Bless AI 提供五个独特的功能:每日问候、庆祝问候、祝福、祷告和名言的文本生成和图片生成。

BlessAI 135
查看详情 BlessAI

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

function browerKernel(){   
    
    var result;   
    
    ['webkit', 'moz', 'o', 'ms'].forEach(function(prefix){   
    
        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();
登录后复制

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

<!DOCTYPE HTML>       
<html>       
<head>       
     <script type="text/javascript">       
          timer = 0;       
          function onLoad(){       
               document.addEventListener("visibilitychange",stateChanged);       
               document.addEventListener("webkitvisibilitychange", stateChanged);       
               document.addEventListener("msvisibilitychange", 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()-timer)/1000+ ' seconds.')       
               }       
          }       
     </script>       
</head>       
<body onLoad="onLoad()">       
</body>       
</html>
登录后复制

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

以上就是HTML5实现页面切换激活的PageVisibility API使用初探_html5教程技巧的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关标签:
HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号