当前位置:首页 > VUE

vue 实现多个倒计

2026-01-19 01:14:08VUE

Vue 实现多个倒计时的方法

在 Vue 中实现多个倒计时可以通过以下方式完成:

使用 setIntervalclearInterval

通过 Vue 的 dataref(Composition API)存储倒计时数据,并使用 setIntervalclearInterval 控制计时逻辑。

<template>
  <div v-for="(timer, index) in timers" :key="index">
    倒计时 {{ index + 1 }}: {{ timer.remainingTime }} 秒
  </div>
</template>

<script>
export default {
  data() {
    return {
      timers: [
        { remainingTime: 60, intervalId: null },
        { remainingTime: 120, intervalId: null },
      ],
    };
  },
  mounted() {
    this.timers.forEach((timer, index) => {
      timer.intervalId = setInterval(() => {
        if (timer.remainingTime > 0) {
          timer.remainingTime--;
        } else {
          clearInterval(timer.intervalId);
        }
      }, 1000);
    });
  },
  beforeDestroy() {
    this.timers.forEach((timer) => {
      if (timer.intervalId) clearInterval(timer.intervalId);
    });
  },
};
</script>

使用 Vue 3 Composition API

在 Vue 3 中,可以使用 refonMounted 实现多个倒计时。

<template>
  <div v-for="(timer, index) in timers" :key="index">
    倒计时 {{ index + 1 }}: {{ timer.remainingTime }} 秒
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';

const timers = ref([
  { remainingTime: 60, intervalId: null },
  { remainingTime: 120, intervalId: null },
]);

onMounted(() => {
  timers.value.forEach((timer) => {
    timer.intervalId = setInterval(() => {
      if (timer.remainingTime > 0) {
        timer.remainingTime--;
      } else {
        clearInterval(timer.intervalId);
      }
    }, 1000);
  });
});

onBeforeUnmount(() => {
  timers.value.forEach((timer) => {
    if (timer.intervalId) clearInterval(timer.intervalId);
  });
});
</script>

使用第三方库(如 vue-countdown

如果需要更复杂的功能,可以使用第三方库 vue-countdown 实现多个倒计时。

<template>
  <div v-for="(time, index) in countdownTimes" :key="index">
    <countdown :time="time" v-slot="{ minutes, seconds }">
      倒计时 {{ index + 1 }}: {{ minutes }}:{{ seconds }}
    </countdown>
  </div>
</template>

<script>
import Countdown from 'vue-countdown';

export default {
  components: { Countdown },
  data() {
    return {
      countdownTimes: [60000, 120000], // 毫秒为单位
    };
  },
};
</script>

动态添加倒计时

如果需要动态添加倒计时,可以通过方法控制倒计时的增减。

vue 实现多个倒计

<template>
  <div v-for="(timer, index) in timers" :key="index">
    倒计时 {{ index + 1 }}: {{ timer.remainingTime }} 秒
    <button @click="removeTimer(index)">移除</button>
  </div>
  <button @click="addTimer">添加倒计时</button>
</template>

<script>
export default {
  data() {
    return {
      timers: [],
    };
  },
  methods: {
    addTimer() {
      const newTimer = {
        remainingTime: 30,
        intervalId: null,
      };
      newTimer.intervalId = setInterval(() => {
        if (newTimer.remainingTime > 0) {
          newTimer.remainingTime--;
        } else {
          clearInterval(newTimer.intervalId);
        }
      }, 1000);
      this.timers.push(newTimer);
    },
    removeTimer(index) {
      clearInterval(this.timers[index].intervalId);
      this.timers.splice(index, 1);
    },
  },
  beforeDestroy() {
    this.timers.forEach((timer) => {
      if (timer.intervalId) clearInterval(timer.intervalId);
    });
  },
};
</script>

注意事项

  • 使用 setInterval 时,确保在组件销毁时清除定时器以避免内存泄漏。
  • 如果需要更精确的倒计时,可以使用 requestAnimationFrameperformance.now() 替代 setInterval
  • 在 Vue 3 中,推荐使用 Composition API 结合 refonMounted 管理倒计时逻辑。

标签: 多个vue
分享给朋友:

相关文章

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安装…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…