Keep screen awake via Wake Lock API while stopwatch is running
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e9995bb5d2
commit
4e1028e1a1
1 changed files with 15 additions and 3 deletions
|
|
@ -955,6 +955,18 @@ var sw = (function(){
|
||||||
var swEl = document.getElementById('sw');
|
var swEl = document.getElementById('sw');
|
||||||
var state = 0; // 0=stopped, 1=running, 2=paused
|
var state = 0; // 0=stopped, 1=running, 2=paused
|
||||||
var start = 0, elapsed = 0, raf = null;
|
var start = 0, elapsed = 0, raf = null;
|
||||||
|
var wakeLock = null;
|
||||||
|
|
||||||
|
function acquireWakeLock(){
|
||||||
|
if(!('wakeLock' in navigator)) return;
|
||||||
|
navigator.wakeLock.request('screen').then(function(s){ wakeLock = s; }).catch(function(){});
|
||||||
|
}
|
||||||
|
function releaseWakeLock(){
|
||||||
|
if(wakeLock){ wakeLock.release(); wakeLock = null; }
|
||||||
|
}
|
||||||
|
document.addEventListener('visibilitychange', function(){
|
||||||
|
if(document.visibilityState === 'visible' && state === 1) acquireWakeLock();
|
||||||
|
});
|
||||||
|
|
||||||
function getMs(){ return state === 1 ? elapsed + (Date.now() - start) : elapsed; }
|
function getMs(){ return state === 1 ? elapsed + (Date.now() - start) : elapsed; }
|
||||||
|
|
||||||
|
|
@ -975,18 +987,18 @@ var sw = (function(){
|
||||||
if(state === 0){
|
if(state === 0){
|
||||||
start = Date.now(); elapsed = 0;
|
start = Date.now(); elapsed = 0;
|
||||||
swEl.classList.add('running');
|
swEl.classList.add('running');
|
||||||
state = 1; tick();
|
state = 1; tick(); acquireWakeLock();
|
||||||
} else if(state === 1){
|
} else if(state === 1){
|
||||||
cancelAnimationFrame(raf);
|
cancelAnimationFrame(raf);
|
||||||
elapsed += Date.now() - start;
|
elapsed += Date.now() - start;
|
||||||
swEl.textContent = fmt(elapsed);
|
swEl.textContent = fmt(elapsed);
|
||||||
swEl.classList.remove('running');
|
swEl.classList.remove('running');
|
||||||
state = 2; updateFillBtns();
|
state = 2; updateFillBtns(); releaseWakeLock();
|
||||||
} else {
|
} else {
|
||||||
cancelAnimationFrame(raf);
|
cancelAnimationFrame(raf);
|
||||||
elapsed = 0; swEl.textContent = '0.00s';
|
elapsed = 0; swEl.textContent = '0.00s';
|
||||||
swEl.classList.remove('running');
|
swEl.classList.remove('running');
|
||||||
state = 0; updateFillBtns();
|
state = 0; updateFillBtns(); releaseWakeLock();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue