32 lines
1.7 KiB
JavaScript
32 lines
1.7 KiB
JavaScript
/** Invoke fullscreen synchronously within the click/keyboard gesture, then handle its promise. */
|
|
const PlayerFullscreen = {
|
|
async toggle(video, container, doc = document) {
|
|
try {
|
|
if (doc.fullscreenElement && doc.exitFullscreen) {
|
|
await doc.exitFullscreen();
|
|
} else if (doc.webkitFullscreenElement && doc.webkitExitFullscreen) {
|
|
await doc.webkitExitFullscreen();
|
|
} else if (video?.webkitDisplayingFullscreen && video.webkitExitFullscreen) {
|
|
await video.webkitExitFullscreen();
|
|
} else {
|
|
const target = container || video;
|
|
// Some iPhones expose element methods even though element fullscreen is disabled.
|
|
const standard = doc.fullscreenEnabled === true ||
|
|
(doc.fullscreenEnabled === undefined && !video?.webkitEnterFullscreen);
|
|
const prefixed = doc.webkitFullscreenEnabled === true ||
|
|
(doc.webkitFullscreenEnabled === undefined && doc.fullscreenEnabled !== false && !video?.webkitEnterFullscreen);
|
|
if (standard && target?.requestFullscreen) await target.requestFullscreen();
|
|
else if (prefixed && target?.webkitRequestFullscreen) await target.webkitRequestFullscreen();
|
|
else if (video?.webkitEnterFullscreen) await video.webkitEnterFullscreen();
|
|
else return false;
|
|
}
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Fullscreen failed:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
};
|
|
if (typeof window !== 'undefined') window.PlayerFullscreen = PlayerFullscreen;
|
|
if (typeof module !== 'undefined') module.exports = PlayerFullscreen;
|