当前位置:首页 > VUE

vue实现倒计时功能

2026-02-25 14:22:11VUE

Vue 倒计时功能实现方法

使用 setInterval 基础实现

在 Vue 组件中,通过 data 定义倒计时初始值,使用 setInterval 每秒更新剩余时间。

<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>

使用计算属性显示格式化时间

将秒数转换为 分钟:秒 的格式,提升可读性。

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

<script>
export default {
  computed: {
    formattedTime() {
      const minutes = Math.floor(this.countdown / 60)
      const seconds = this.countdown % 60
      return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`
    }
  }
  // 其余代码与基础实现相同
}
</script>

使用 Vue 自定义指令封装

创建可复用的倒计时指令,适用于多个场景。

// 全局注册指令
Vue.directive('countdown', {
  bind(el, binding) {
    let count = binding.value || 60
    const timer = setInterval(() => {
      el.textContent = count
      if (count-- <= 0) {
        clearInterval(timer)
        el.textContent = "时间到"
      }
    }, 1000)
    el._countdownTimer = timer
  },
  unbind(el) {
    clearInterval(el._countdownTimer)
  }
})

// 使用方式
<div v-countdown="30"></div>

使用第三方库(如 moment.js

处理更复杂的时间格式和时区问题。

vue实现倒计时功能

import moment from 'moment'

methods: {
  startCountdown() {
    this.endTime = moment().add(60, 'seconds')
    this.timer = setInterval(() => {
      const diff = this.endTime.diff(moment(), 'seconds')
      this.countdown = diff > 0 ? diff : 0
      if (diff <= 0) clearInterval(this.timer)
    }, 1000)
  }
}

注意事项

  1. 组件销毁时务必清除定时器,避免内存泄漏
  2. 对于需要暂停/继续的场景,可扩展为存储剩余时间到 data
  3. 服务端渲染(SSR)场景需注意 setInterval 在服务端的兼容性
  4. 高精度需求可使用 requestAnimationFrame 替代 setInterval

标签: 倒计时功能
分享给朋友:

相关文章

vue实现倒计时功能

vue实现倒计时功能

vue实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInter…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue功能实现难点

vue功能实现难点

Vue 功能实现的常见难点 响应式系统深度监听 Vue 的响应式系统基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3),但对嵌套对象或数组的深层属性变化需要额外…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…

vue实现表情功能

vue实现表情功能

实现表情功能的基本思路 在Vue中实现表情功能通常涉及表情选择器的UI组件开发、表情数据的存储与渲染,以及用户输入与表情的交互逻辑。以下是具体实现方法: 表情数据准备 准备一个表情符号的数组或对象,…

vue实现筛选功能

vue实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及数据绑定、计算属性和方法的使用。通过监听用户输入或选择,动态过滤数据列表。 基础筛选实现 创建一个输入框绑定到Vue实例的data属性,使用计算…