39 lines
823 B
JavaScript
39 lines
823 B
JavaScript
// timer.worker.js
|
|
let timer = null;
|
|
let interval = 1000;
|
|
|
|
self.addEventListener('message', (e) => {
|
|
switch (e.data.command) {
|
|
case 'start':
|
|
startTimer(e.data.interval);
|
|
break;
|
|
case 'stop':
|
|
stopTimer();
|
|
break;
|
|
case 'update':
|
|
interval = e.data.interval;
|
|
break;
|
|
}
|
|
});
|
|
|
|
// 关闭时的清理逻辑
|
|
self.addEventListener('close', () => {
|
|
stopTimer();
|
|
});
|
|
|
|
function startTimer(newInterval) {
|
|
interval = newInterval || interval;
|
|
stopTimer(); // 先停止已有定时器
|
|
self.postMessage({ type: 'tick', timestamp:performance.now() });
|
|
timer = setInterval(() => {
|
|
const timestamp = performance.now();
|
|
self.postMessage({ type: 'tick', timestamp });
|
|
}, interval);
|
|
}
|
|
|
|
function stopTimer() {
|
|
if (timer) {
|
|
clearInterval(timer);
|
|
timer = null;
|
|
}
|
|
} |