Skip to content

倒计时(useCountdown)

useCountdown 是一个用于倒计时管理的 Vue 组合式函数,支持精确的挂钟时间校准、毫秒级精度和自定义格式化。

它能帮助你轻松处理:验证码倒计时、活动倒计时、支付剩余时间、订单超时关闭等场景。

此 API 源码:GitHub

使用方式

vue
<template>
  <text>{{ formatted }}</text>
  <button @tap="countdown.start()">开始</button>
  <button @tap="countdown.pause()">暂停</button>
  <button @tap="countdown.reset()">重置</button>
</template>

<script setup>
import { computed } from 'vue'
import { useCountdown, formatCountdown } from 'see-u-ui'

const countdown = useCountdown({
  time: 60000,
  onChange: (timeData) => console.log('变化:', timeData),
  onFinish: () => console.log('倒计时结束')
})

const formatted = computed(() => formatCountdown(countdown.current.value, 'mm:ss'))
</script>
vue
<script setup>
import { useCountdown } from 'see-u-ui'

// 使用服务端时间戳,确保多端一致
const countdown = useCountdown({
  serverTime: 1700000000000,
  endTime: 1700003600000,  // 1小时后结束
  onFinish: () => console.log('活动结束')
})
</script>
vue
<script setup>
import { useCountdown } from 'see-u-ui'

const countdown = useCountdown({
  time: 10000,
  millisecond: true,
  onChange: (timeData) => {
    console.log(`${timeData.seconds}.${timeData.milliseconds}`)
  }
})
</script>

格式化规则

formatCountdown 支持以下占位符:

占位符说明示例
DD天数(补零)01
D天数1
HH小时(补零)02
H小时2
mm分钟(补零)05
m分钟5
ss秒数(补零)09
s秒数9
SSS毫秒(补零)012
S毫秒12

API

useCountdown(options)

倒计时管理 Hook

参数类型默认值说明
options.timenumber0倒计时时长(毫秒)
options.intervalnumber自动倒计时间隔(毫秒),毫秒模式 16ms,普通模式 1000ms
options.millisecondbooleanfalse是否开启毫秒级精度
options.serverTimenumberundefined服务端当前时间戳(毫秒)
options.endTimenumberundefined结束时间戳(毫秒),配合 serverTime 使用
options.onChange(timeData) => voidundefined倒计时变化回调
options.onFinish() => voidundefined倒计时结束回调

返回值:

属性/方法类型说明
currentRef<CountdownTimeData>当前倒计时数据
isRunningRef<boolean>是否正在运行
start() => void开始倒计时
pause() => void暂停倒计时
reset(time?: number) => void重置倒计时,可指定新时长
finish() => void立即结束倒计时
cleanup() => void清理定时器

parseCountdownTime(time)

解析倒计时数据

参数类型说明
timenumber剩余时间(毫秒)

返回: CountdownTimeData


formatCountdown(timeData, format?)

格式化倒计时显示

参数类型默认值说明
timeDataCountdownTimeData倒计时数据
formatstring'HH:mm:ss'格式化模板

返回: string


CountdownTimeData

typescript
interface CountdownTimeData {
  days: number        // 天数
  hours: number       // 小时
  minutes: number     // 分钟
  seconds: number     // 秒数
  milliseconds: number // 毫秒
  total: number       // 总剩余毫秒数
}

辽 ICP 备 2025070134 号