JS阻止手機鎖屏

此前為哥尼斯堡做了個html+svg單機遊戲,但是一旦手機鎖屏,則動畫將不能正常運作。其原因是,手機熄屏之後就停止了計時。

一開始我想計算熄屏時間,但是用setInterval計時的話,無法跟Date.now()一樣準確。

因此後來改用阻止熄屏來解決此問題。

用到wakeLock,具體代碼如下:

// if support wakeLock
const canWakeLock = () => 'wakeLock' in navigator;

// start wakeLock
const canWakeLock = () => 'wakeLock' in navigator;
const requestWakeLock = async ()=>{
	try {
		wakeLock = await navigator.wakeLock.request('screen');
		console.log('Wake Lock is active!');
	} catch (err) {
		console.log(`${err.name}, ${err.message}`);
	}
}
requestWakeLock()

// release wakeLock
wakeLock.release().then(() => wakeLock = null);

// if wakeLock released
wakeLock.addEventListener('release', () => {
	console.log('Wake Lock has been released');
});

// restart wakeLock
document.addEventListener('visibilitychange', async () => {
	if (wakeLock !== null && document.visibilityState === 'visible') {
		requestWakeLock()
	}
});

不過後來還是把svg動畫換成了css3動畫,因為css3動畫不必計時,隨時可以順滑啟動。

Leave a Comment