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