国产精品无码一区二区三区太,亚洲一线产区二线产区区别,欧美A区,人妻jealousvue人妻

×

當(dāng)前窗口獲得焦點(diǎn)js事件【visibilitychange】

  • 作者:sdfcsd
  • 來(lái)源:互聯(lián)網(wǎng)
  • 瀏覽:100
  • 2020-04-17 15:42:15

當(dāng)前窗口獲得焦點(diǎn)js事件,html5發(fā)布之前我們使用window.onfocus和window.onblur來(lái)獲得窗口焦點(diǎn)和失去窗口焦點(diǎn),

webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial>

當(dāng)前窗口獲得焦點(diǎn)js事件,html5發(fā)布之前我們使用window.onfocus和window.onblur來(lái)獲得窗口焦點(diǎn)和失去窗口焦點(diǎn),

 監(jiān)聽(tīng) onfocus() 和window.onblur()事件實(shí)現(xiàn)

//當(dāng)前窗口得到焦點(diǎn) 
window.onfocus = function() { 
  //播放動(dòng)畫(huà)或視頻 
}; 
 
//當(dāng)前窗口失去焦點(diǎn) 
window.onblur = function() { 
  //暫停動(dòng)畫(huà)或視頻 
};

這個(gè)方法可以實(shí)現(xiàn)切換標(biāo)簽暫停動(dòng)畫(huà)視頻,但是會(huì)帶來(lái)一個(gè)問(wèn)題,由于是判斷焦點(diǎn),如果是在當(dāng)前頁(yè)面上鋪上一個(gè)小窗口,那當(dāng)前頁(yè)面就暫停了動(dòng)畫(huà),試想,如果你一邊看片,一邊開(kāi)個(gè)聊天窗口與MM聊天,當(dāng)你操作聊天窗口的時(shí)候,視頻暫停了,這并不是你想要的效果。

現(xiàn)在我們來(lái)看看HTML5是怎么解決的。H5 提供了很多簡(jiǎn)單實(shí)用的 API,Page Visibility API 就是其中之一。 Page Visibility API能有效的幫助我們完成這樣的判斷。

 使用html5的Page Visibility API來(lái)實(shí)現(xiàn)

這個(gè) API 本身非常簡(jiǎn)單,由以下三部分組成。

document.hidden:表示頁(yè)面是否隱藏的布爾值。頁(yè)面隱藏包括 頁(yè)面在后臺(tái)標(biāo)簽頁(yè)中 或者 瀏覽器最小化 (注意,頁(yè)面被其他軟件遮蓋并不算隱藏,比如打開(kāi)的 sublime 遮住了瀏覽器)。

document.visibilityState:表示下面 4 個(gè)可能狀態(tài)的值

hidden:頁(yè)面在后臺(tái)標(biāo)簽頁(yè)中或者瀏覽器最小化

visible:頁(yè)面在前臺(tái)標(biāo)簽頁(yè)中

prerender:頁(yè)面在屏幕外執(zhí)行預(yù)渲染處理 document.hidden 的值為 true

unloaded:頁(yè)面正在從內(nèi)存中卸載

Visibilitychange事件:當(dāng)文檔從可見(jiàn)變?yōu)椴豢梢?jiàn)或者從不可見(jiàn)變?yōu)榭梢?jiàn)時(shí),會(huì)觸發(fā)該事件。

這樣,我們可以監(jiān)聽(tīng) Visibilitychange 事件,當(dāng)該事件觸發(fā)時(shí),獲取 document.hidden 的值,根據(jù)該值進(jìn)行頁(yè)面一些事件的處理。

document.addEventListener(\'visibilitychange\', function() { 
  var isHidden = document.hidden; 
  if (isHidden) { 
    // 動(dòng)畫(huà)視頻暫停 
  } else { 
    // 動(dòng)畫(huà)視頻開(kāi)始 
  } 
});

結(jié)合demo中的實(shí)例,切換標(biāo)簽或者最小化的時(shí)候,demo中的視頻會(huì)暫停,恢復(fù)當(dāng)前頁(yè)面時(shí),demo中的視頻會(huì)繼續(xù)播放。完整的代碼如下:

var hidden, visibilityChange;  
if (typeof document.hidden !== "undefined") {  
  hidden = "hidden"; 
  visibilityChange = "visibilitychange"; 
} else if (typeof document.msHidden !== "undefined") { 
  hidden = "msHidden"; 
  visibilityChange = "msvisibilitychange"; 
} else if (typeof document.webkitHidden !== "undefined") { 
  hidden = "webkitHidden"; 
  visibilityChange = "webkitvisibilitychange"; 
} 
  
var videoElement = document.getElementById("videoElement"); 
 
// 如果頁(yè)面被隱藏,則暫停播放,如果頁(yè)面恢復(fù),則繼續(xù)播放 
function handleVisibilityChange() { 
  if (document[hidden]) { 
    videoElement.pause(); 
  } else { 
    videoElement.play(); 
  } 
} 
 
// 判斷瀏覽器的支持情況 
if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") { 
  consol.log("This demo requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API."); 
} else { 
  // 監(jiān)聽(tīng)visibilityChange事件    
  document.addEventListener(visibilityChange, handleVisibilityChange, false); 
     
  // 當(dāng)播放器暫停的時(shí)候,將頁(yè)面標(biāo)題設(shè)置為:Paused. 
  videoElement.addEventListener("pause", function(){ 
    document.title = \'Paused\'; 
  }, false); 
     
  // 當(dāng)播放器正常播放時(shí),將頁(yè)面標(biāo)題設(shè)置為:Playing. 
  videoElement.addEventListener("play", function(){ 
    document.title = \'Playing\';  
  }, false); 
}

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢(xún)獲取折扣

Loading