婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5實現(xiàn)頁面切換激活的PageVisibility API使用初探

HTML5實現(xiàn)頁面切換激活的PageVisibility API使用初探

熱門標(biāo)簽:電話機(jī)器人如何 高德地圖標(biāo)注賓館位置 聯(lián)通400電話申請 百應(yīng)電銷機(jī)器人產(chǎn)業(yè) 飛亞外呼系統(tǒng) 電視購物電銷外呼系統(tǒng) 杭州營銷電銷機(jī)器人供應(yīng)商 貸款電銷人工和機(jī)器人哪個好 西寧智能外呼系統(tǒng)加盟

HTMl5 推出了一個很“特別”的 API Page Visibility ,之所以說它特別,是因為這個 API 關(guān)注的是一個很少人留意的功能 —— 瀏覽器標(biāo)簽( tab ) 是否被激活。這里必須解釋一下,這個“激活”,指的是這個標(biāo)簽是否正被用戶瀏覽,或者說是否為當(dāng)前標(biāo)簽。

那么,這個 API 究竟有些什么用途呢?通常,很多傳統(tǒng)的頁面在用戶沒有激活它的時候,它還會繼續(xù)工作,例如,當(dāng)用戶正在瀏覽新聞門戶,而他之前打開的 NBA 球賽頁面會繼續(xù)刷新獲取最新結(jié)果,視頻網(wǎng)站會繼續(xù)占用帶寬加載資源,于是,如果這類不必要的工作太多了,就會造成很多的資源浪費。因此,這貨相當(dāng)有用:

Web 程序每隔一段時間會自動更新頁面信息,確保用戶獲取到及時的信息,但是,當(dāng)用戶正在瀏覽其他頁面時,可以控制它暫停更新。
視頻網(wǎng)站在播放在線視頻時會不斷加載視頻,直到視頻加載完畢,但是,當(dāng)用戶正在瀏覽其他頁面時,可以暫停加載視頻資源,節(jié)省帶寬。
網(wǎng)站首頁上有個大幻燈自動播放,當(dāng)用戶瀏覽其他頁面了,就可以暫停播放。
于是,通過 Page Visibility ,我們可以至少達(dá)到以下一種或幾種的好處:

1.節(jié)省服務(wù)器資源,Ajax 輪詢這類服務(wù)器資源占用常常會被忽略,關(guān)閉這種請求可以節(jié)省資源。
2.節(jié)省內(nèi)存消耗。
3.節(jié)省帶寬消耗。

因此,使用 Page Visibility 無論是對于用戶還是服務(wù)器都有好處。

接下來正式介紹一下這個 API 。Page Visibility 會在瀏覽器的 document 對象上添加兩個屬性 hidden 和 visibilityState 。如果當(dāng)前的標(biāo)簽被激活了,那么 document.hidden 的值為 false ,否則為 true 。visibilityState 則有4個可能值:

hidden:當(dāng)瀏覽器最小化、切換標(biāo)簽、電腦鎖屏?xí)r visibilityState 值是 hidden
visible:當(dāng)瀏覽器最頂級上下文(context)的 document 至少顯示在一個屏幕當(dāng)中時,返回 visible;當(dāng)瀏覽器窗口沒有最小化,但是瀏覽器被其他應(yīng)用遮擋時,這時也為 visible
prerender:當(dāng)文檔被加載到屏幕畫面以外或者不可見時返回 prerender,這個是非必要屬性,瀏覽器可選擇性的支持。
unloaded:當(dāng)文檔將要被離開 ( unload ) 時返回 unloaded,瀏覽器也可選擇性的支持這個屬性
另外,document 上會添加 visibilitychange 事件,當(dāng) document 的可見性改變時觸發(fā)該事件。

好了,介紹完屬性,放上一個 Demo (打開后切換標(biāo)簽即可測試)。

這個 Demo 的作用是監(jiān)聽標(biāo)簽的可見性是否改變 ,并且在標(biāo)簽可見性發(fā)生改變時產(chǎn)生提示。

值得注意的是,在目前,瀏覽器對于 Page Visibility 的支持還是通過私有屬性支持,因此在檢測或利用 Page Visibility 提供的屬性時需要加上瀏覽器私有前綴,例如在 Chrome 中檢測上面的 visibilityState 屬性時,就需要檢測 document.webkitVisibilityState 而不是 document.visibilityState 。所以,Demo 中會首先檢測瀏覽器類型,然后才使用 Page Visibility 的 API 。主要代碼如下:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. function browerKernel(){   
  2.     
  3.     var result;   
  4.     
  5.     ['webkit''moz''o''ms'].forEach(function(prefix){   
  6.     
  7.         iftypeof document[ prefix + 'Hidden' ] != 'undefined' ){   
  8.             result = prefix;   
  9.         }   
  10.     });   
  11.     
  12.     return result;   
  13.     
  14. }   
  15.     
  16. function init(){   
  17.     
  18.     prefix = browerKernel();   
  19.     
  20.     var showTip = document.getElementById('showTip');   
  21.     
  22.     document.addEventListener( prefix  + 'visibilitychange'function onVisibilityChange(e){   
  23.     
  24.         var tip = null;   
  25.                 
  26.         if( document[ prefix + 'VisibilityState' ] == 'hidden' ) tip = '<p>離開頁面</p>';   
  27.         else if( document[ prefix + 'VisibilityState' ]  == 'visible' ) tip = '<p>進(jìn)入頁面</p>';   
  28.     
  29.         showTip.innerHTML = showTip.innerHTML + tip;   
  30.     });   
  31. }   
  32.     
  33. window.onload = init();   
  34.   

再再來看一個具體的例子,代碼如下:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE HTML>       
  2. <html>       
  3. <head>       
  4.      <script type="text/javascript">       
  5.           timer = 0;       
  6.           function onLoad(){       
  7.                document.addEventListener("visibilitychange",stateChanged);       
  8.                document.addEventListener("webkitvisibilitychange", stateChanged);       
  9.                document.addEventListener("msvisibilitychange", stateChanged);       
  10.           }       
  11.           function stateChanged(){       
  12.                console.log(document.webkitVisibilityState);       
  13.                if(document.hidden || document.webkitHidden || document.msHidden){       
  14.                     //new tab or window minimized     
  15.                     timer = new Date().getTime();       
  16.                }       
  17.                else {       
  18.                     alert('You were away for ' + (new Date().getTime()-timer)/1000+ ' seconds.')       
  19.                }       
  20.           }       
  21.      </script>       
  22. </head>       
  23. <body onLoad="onLoad()">       
  24. </body>       
  25. </html>    

在上面的代碼中,同樣,在CHROME運行下,在LOAD事件中,監(jiān)聽了相關(guān)的 webkitvisibilitychange事件(這個在CHROME下),如果是IE 10,則是 msvisibilitychange事件,然后在回調(diào)函數(shù)中,開始了計算用戶在頁面停留的時間, 所以當(dāng)你打開其他TAB頁或者最小化后,再切換回原來這個頁,則會JAVASCRIPT 彈出顯示:你離開了頁面多長時間 。
要注意的是,在CHROME中,屬性命名為webkitHidden,事件為 webkitvisibilitychange事件,而在IE 10中,屬性為msHidden 和 msVisibilityState.

標(biāo)簽:晉中 玉溪 邯鄲 安慶 牡丹江 撫州 煙臺 內(nèi)蒙古

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5實現(xiàn)頁面切換激活的PageVisibility API使用初探》,本文關(guān)鍵詞  HTML5,實現(xiàn),頁面,切換,激,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5實現(xiàn)頁面切換激活的PageVisibility API使用初探》相關(guān)的同類信息!
  • 本頁收集關(guān)于HTML5實現(xiàn)頁面切換激活的PageVisibility API使用初探的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 贺兰县| 河间市| 涟源市| 梧州市| 钟山县| 兴国县| 赤城县| 新余市| 三穗县| 商都县| 东平县| 泾川县| 嘉荫县| 永清县| 葫芦岛市| 清徐县| 灵台县| 宁安市| 南汇区| 大方县| 牟定县| 安国市| 临潭县| 澄江县| 同心县| 宁阳县| 长寿区| 图们市| 青海省| 永城市| 延津县| 武夷山市| 崇明县| 武宁县| 开阳县| 西贡区| 宁化县| 新民市| 营口市| 九龙坡区| 大竹县|