当前位置:首页 > VUE

vue倒计时实现

2026-01-22 18:45:40VUE

Vue 倒计时实现方法

使用 setInterval 基础实现

在 Vue 组件中,通过 data 定义倒计时初始值,使用 setInterval 实现倒计时逻辑,并在组件销毁时清除定时器。

vue倒计时实现

<template>
  <div>{{ countdown }}</div>
</template>

<script>
export default {
  data() {
    return {
      countdown: 60, // 初始值(单位:秒)
      timer: null
    };
  },
  mounted() {
    this.startCountdown();
  },
  methods: {
    startCountdown() {
      this.timer = setInterval(() => {
        if (this.countdown > 0) {
          this.countdown--;
        } else {
          clearInterval(this.timer);
        }
      }, 1000);
    }
  },
  beforeDestroy() {
    clearInterval(this.timer);
  }
};
</script>

使用计算属性格式化显示

通过计算属性将秒数格式化为 分钟:秒 的显示形式,提升用户体验。

vue倒计时实现

<template>
  <div>{{ formattedTime }}</div>
</template>

<script>
export default {
  data() {
    return { countdown: 125 }; // 示例:2分5秒
  },
  computed: {
    formattedTime() {
      const minutes = Math.floor(this.countdown / 60);
      const seconds = this.countdown % 60;
      return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
    }
  }
};
</script>

封装可复用组件

将倒计时逻辑封装为可复用的组件,支持通过 props 传递初始时间和回调函数。

<template>
  <div>{{ timeLeft }}</div>
</template>

<script>
export default {
  props: {
    initialTime: { type: Number, default: 60 },
    onEnd: { type: Function, default: () => {} }
  },
  data() {
    return { timeLeft: this.initialTime };
  },
  mounted() {
    const timer = setInterval(() => {
      this.timeLeft--;
      if (this.timeLeft <= 0) {
        clearInterval(timer);
        this.onEnd();
      }
    }, 1000);
  }
};
</script>

使用第三方库(如 dayjs

对于复杂的时间处理(如跨天倒计时),可使用 dayjs 等库简化计算。

import dayjs from 'dayjs';

export default {
  data() {
    return { endTime: dayjs().add(1, 'hour') };
  },
  computed: {
    remainingTime() {
      const now = dayjs();
      return this.endTime.diff(now, 'second');
    }
  }
};

注意事项

  • 定时器需在 beforeDestroyunmounted 生命周期中清除,避免内存泄漏。
  • 移动端需考虑页面休眠时定时器暂停的问题,可通过监听 visibilitychange 事件处理。
  • 服务端渲染(SSR)场景下,需避免 setInterval 在服务端执行。

标签: 倒计时vue
分享给朋友:

相关文章

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现换肤

vue实现换肤

使用 CSS 变量实现换肤 在 Vue 项目中,可以通过 CSS 变量(Custom Properties)动态切换主题色。CSS 变量可以在运行时修改,适合实现换肤功能。 定义全局 CSS 变量:…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue实现tree

vue实现tree

Vue 实现 Tree 组件 使用 Vue 实现 Tree 组件可以通过递归组件的方式来实现层级结构展示。以下是一个完整的实现方法: 基础递归组件实现 创建 Tree 组件文件 Tree.vue,使…

vue实现swiper

vue实现swiper

Vue 中实现 Swiper 的方法 安装 Swiper 依赖 在 Vue 项目中安装 Swiper 和相关依赖: npm install swiper vue-awesome-swiper 全局引…