Initial control project import
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
const button = document.querySelector('#wakeLockBtn');
|
||||
if (!button) return;
|
||||
|
||||
let wakeLock = null;
|
||||
let wanted = false;
|
||||
|
||||
function supported() {
|
||||
return 'wakeLock' in navigator;
|
||||
}
|
||||
|
||||
function active() {
|
||||
return wakeLock !== null && wakeLock.released === false;
|
||||
}
|
||||
|
||||
function render() {
|
||||
const isActive = active();
|
||||
button.disabled = !supported();
|
||||
button.classList.toggle('wake-active', isActive);
|
||||
button.textContent = 'WakeLock';
|
||||
button.title = supported() ? '화면 꺼짐 방지' : '현재 브라우저에서 WakeLock을 지원하지 않습니다.';
|
||||
}
|
||||
|
||||
async function requestWakeLock() {
|
||||
if (!supported()) {
|
||||
render();
|
||||
return;
|
||||
}
|
||||
|
||||
wakeLock = await navigator.wakeLock.request('screen');
|
||||
wakeLock.addEventListener('release', () => {
|
||||
wakeLock = null;
|
||||
render();
|
||||
});
|
||||
render();
|
||||
}
|
||||
|
||||
async function releaseWakeLock() {
|
||||
wanted = false;
|
||||
if (wakeLock) {
|
||||
await wakeLock.release();
|
||||
}
|
||||
wakeLock = null;
|
||||
render();
|
||||
}
|
||||
|
||||
button.addEventListener('click', () => {
|
||||
const job = active() ? releaseWakeLock() : (async () => {
|
||||
wanted = true;
|
||||
await requestWakeLock();
|
||||
})();
|
||||
|
||||
job.catch(error => {
|
||||
wanted = false;
|
||||
wakeLock = null;
|
||||
alert(error.message || 'WakeLock failed');
|
||||
render();
|
||||
});
|
||||
});
|
||||
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.visibilityState === 'visible' && wanted && !active()) {
|
||||
requestWakeLock().catch(() => render());
|
||||
}
|
||||
});
|
||||
|
||||
render();
|
||||
})();
|
||||
Reference in New Issue
Block a user