W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
通常,我們使用各種事件,判斷用戶是否正在離開當(dāng)前頁面。
但是,手機(jī)瀏覽器往往不會(huì)觸發(fā)這些事件,原因是瀏覽器進(jìn)程會(huì)被突然關(guān)閉或者切換到后臺(tái),從而沒有機(jī)會(huì)觸發(fā)這些事件。常見的場景有以下這些。
上面這些情況,都會(huì)導(dǎo)致瀏覽器進(jìn)程切換到后臺(tái),也很可能會(huì)被操作系統(tǒng)自動(dòng)終止,以便回收資源。 這使得pagehide
、beforeunload
、unload
等事件根本不會(huì)觸發(fā)。
這種情況下面,我們就要使用 Page Visibility API,判斷頁面是否可見。它可以保證會(huì)在手機(jī)瀏覽器得到執(zhí)行。
// 頁面的 visibility 屬性可能返回三種狀態(tài)
// prerender,visible 和 hidden
let pageVisibility = document.visibilityState;
// 監(jiān)聽 visibility change 事件
document.addEventListener('visibilitychange', function() {
// 頁面變?yōu)椴豢梢姇r(shí)觸發(fā)
if (document.visibilityState == 'hidden') { ... }
// 頁面變?yōu)榭梢姇r(shí)觸發(fā)
if (document.visibilityState == 'visible') { ... }
});
其他的用途還包括根據(jù)用戶行為調(diào)整程序。比如,在輪詢的情況下,如果頁面處于當(dāng)前窗口,可以每隔15秒向服務(wù)器請(qǐng)求數(shù)據(jù);如果不處于當(dāng)前窗口,則每隔幾分鐘請(qǐng)求一次數(shù)據(jù)。
實(shí)際開發(fā)中,為了防止某些瀏覽器不支持這個(gè) API,最好同時(shí)監(jiān)聽pagehide
事件,這樣會(huì)比較保險(xiǎn)。
這個(gè) API 部署在document
對(duì)象上,提供以下兩個(gè)屬性。
document.hidden
:返回一個(gè)布爾值,表示當(dāng)前是否被隱藏。document.visibilityState
:表示頁面當(dāng)前的狀態(tài),可以取三個(gè)值。
頁面的可見狀態(tài)發(fā)生變化時(shí),會(huì)觸發(fā)VisibilityChange
事件。
document.addEventListener('visibilitychange', function () {
console.log(document.visibilityState);
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: