-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfullscreen.js
34 lines (31 loc) · 1.49 KB
/
fullscreen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
let wake_lock
function request_wake_lock() {
navigator.wakeLock?.request('screen').then(lock => wake_lock = lock).catch(e => console.warn(e.message))
}
function visibility_change_handler() {
if (wake_lock && document.visibilityState == 'visible')
request_wake_lock()
}
export default function toggle_fullscreen(event_or_elem, landscape=true, target_screen, elem) {
if (event_or_elem.preventDefault)
event_or_elem.preventDefault()
elem ??= event_or_elem?.currentTarget || event_or_elem
const was_not_fullscreen_before = !document.fullscreenElement
if (was_not_fullscreen_before) {
if (!elem.dataset.has_fullscreen_handler) {
elem.dataset.has_fullscreen_handler = true
elem.addEventListener('fullscreenchange', () => {
if (elem.classList.toggle('fullscreen')) {
if (landscape)
screen.orientation.lock('landscape').catch(e => console.warn(e.message)) // Works only in Chrome Android. See: https://bugzilla.mozilla.org/show_bug.cgi?id=1744125
request_wake_lock()
document.addEventListener('visibilitychange', visibility_change_handler)
} else
wake_lock?.release().then(() => wake_lock = null)
})
}
elem.requestFullscreen({navigationUI: 'hide', screen: target_screen}).catch(e => console.warn(e.message))
} else
document.exitFullscreen()
return was_not_fullscreen_before
}