因爲全屏播放在移動web上的兼容問題,尤爲是在iOS上,讓全屏本應該比較簡單的操做,根據業務的需求,有時候會有些複雜。這裏查看原生全屏相關APIjavascript
onwebkitfullscreenchange
在iOS上沒法監聽到,感知不到全屏狀態變化,另外對當前全屏元素的標識的API支持也有問題。
webkitDisplayingFullscreen/ webkitPresentationMode
兩個值的狀態。
而安卓上,webkitDisplayingFullscreen
存在問題,能夠監聽document.onwebkitfullscreenchange
,並經過event對象的srcElement是否爲當前video DOM對象來結合webkitIsFullScreen
來判斷當前video是否處於全屏狀態。java
// 進入全屏
if (video.requestFullscreen) {
// 最新標準
video.requestFullscreen();
} else if (video.webkitRequestFullscreen) {
video.webkitRequestFullscreen();
} else {
// iOS進入全屏
video.webkitEnterFullscreen();
// 針對iOS監聽不到webkitfullscreenchange事件作的兼容,感知退出全屏
let timer = setInterval(() => {
if (!video.webkitDisplayingFullscreen) {
// 退出了全屏
clearInterval(timer);
}
}, 1000);
}
// 狀態判斷,PC Chrome
document.addEventListener('webkitfullscreenchange', (evt) => {
if (!video.webkitDisplayingFullscreen) {
// 退出全屏
}
}, false);
// 全屏狀態改變事件,Android
document.addEventListener('webkitfullscreenchange', (evt) => {
if (!document.webkitIsFullScreen && evt.srcElement === video) {
// 退出全屏
}
}, false);複製代碼
const video = document.querySelector('#video');
console.log('document.onfullscreenchange: ', 'onfullscreenchange' in document)
console.log('document.onwebkitfullscreenchange: ', 'onwebkitfullscreenchange' in document);
console.log('document.webkitExitFullscreen: ', 'webkitExitFullscreen' in document)
console.log('\n');
console.log('document.webkitCurrentFullScreenElement: ', document.webkitCurrentFullScreenElement);
console.log('document.webkitFullscreenElement: ', document.webkitFullscreenElement);
console.log('document.webkitIsFullScreen: ', document.webkitIsFullScreen);
console.log('document.webkitFullscreenEnabled: ', document.webkitFullscreenEnabled);
console.log('\n');
console.log('video.onwebkitfullscreenchange: ', 'onwebkitfullscreenchange' in video)
console.log('video.webkitExitFullscreen: ', 'webkitExitFullscreen' in video)
console.log('video.displayingFullscreen: ', video.webkitDisplayingFullscreen);
console.log('video.webkitSupportsFullscreen: ', video.webkitSupportsFullscreen);
複製代碼