当前位置:首页 > 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 插件通常用于封装全局功能(如指令、过滤器、混入等),以下是实现 Vue 插件的典型方式: 插件基本结构 const MyPlugin = { instal…

vue实现分页功能

vue实现分页功能

Vue 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的方…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…