实现倒计时可以使用定时器,具体可以使用 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 方法用于处理浏览器可见性变化事件,当浏览器不可见时,清除计时器,当浏览器重新变为可见状态时,重新启动计时器。

vue3项目,我想实现倒计时,并且在浏览器不可见时也可以正常运行要怎么写

原文地址: http://www.cveoy.top/t/topic/rUX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录