vue3项目,我想实现倒计时,并且在浏览器不可见时也可以正常运行要怎么写
实现倒计时可以使用定时器,具体可以使用 setInterval 函数,每隔一定时间执行一次指定的函数,从而实现倒计时效果。
为了在浏览器不可见时也能正常运行,可以使用 requestAnimationFrame 函数,它可以在浏览器不可见时暂停,浏览器重新变为可见状态时,会立即执行之前未执行的操作,保证计时器在浏览器不可见时不会停止。
具体实现可以参考以下代码:
<template>
<div>{{ time }}</div>
</template>
<script>
export default {
data() {
return {
time: 60,
timerId: null,
};
},
mounted() {
this.startTimer();
document.addEventListener("visibilitychange", this.handleVisibilityChange);
},
destroyed() {
clearInterval(this.timerId);
document.removeEventListener("visibilitychange", this.handleVisibilityChange);
},
methods: {
startTimer() {
this.timerId = setInterval(() => {
this.time--;
}, 1000);
requestAnimationFrame(this.updateTimer);
},
updateTimer() {
if (document.hidden) {
requestAnimationFrame(this.updateTimer);
return;
}
if (this.time > 0) {
this.timerId = setInterval(() => {
this.time--;
}, 1000);
requestAnimationFrame(this.updateTimer);
}
},
handleVisibilityChange() {
if (document.hidden) {
clearInterval(this.timerId);
} else {
this.startTimer();
}
},
},
};
</script>
在 mounted 钩子函数中启动计时器,并添加 visibilitychange 事件监听器,在 destroyed 钩子函数中清除计时器和事件监听器。
startTimer 方法中使用 setInterval 启动计时器,并在浏览器不可见时使用 requestAnimationFrame 暂停计时器,浏览器重新变为可见状态时,使用 setInterval 重新启动计时器。
handleVisibilityChange 方法用于处理浏览器可见性变化事件,当浏览器不可见时,清除计时器,当浏览器重新变为可见状态时,重新启动计时器。
原文地址: http://www.cveoy.top/t/topic/rUX 著作权归作者所有。请勿转载和采集!