当前位置:首页 > uni-app

uniapp倒计时

2026-03-04 17:47:12uni-app

uniapp倒计时的实现方法

在uniapp中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法:

使用setInterval实现基础倒计时

data() {
  return {
    count: 60,  // 倒计时总秒数
    timer: null
  }
},
methods: {
  startCountdown() {
    this.timer = setInterval(() => {
      if(this.count <= 0) {
        clearInterval(this.timer)
        return
      }
      this.count--
    }, 1000)
  }
},
onUnload() {
  clearInterval(this.timer)
}

使用uniapp的uni-countdown组件

uniapp倒计时

uniapp提供了内置的倒计时组件,可以直接使用:

<uni-countdown 
  :show-day="false" 
  :hour="1" 
  :minute="12" 
  :second="40"
  @timeup="timeupHandler">
</uni-countdown>

使用第三方库如day.js

uniapp倒计时

对于更复杂的倒计时需求,可以引入day.js等时间处理库:

import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)

// 计算剩余时间
const endTime = dayjs().add(1, 'hour')
const remaining = dayjs.duration(endTime.diff(dayjs()))
const hours = remaining.hours()
const minutes = remaining.minutes()
const seconds = remaining.seconds()

优化性能的requestAnimationFrame实现

对于需要精确到毫秒的倒计时,可以使用requestAnimationFrame:

data() {
  return {
    startTime: 0,
    duration: 60000,  // 60秒
    remaining: 60000
  }
},
methods: {
  startCountdown() {
    this.startTime = Date.now()
    this.animateCountdown()
  },
  animateCountdown() {
    const elapsed = Date.now() - this.startTime
    this.remaining = Math.max(0, this.duration - elapsed)

    if(this.remaining > 0) {
      requestAnimationFrame(this.animateCountdown)
    }
  }
}

注意事项

  1. 组件销毁时务必清除定时器,避免内存泄漏
  2. 倒计时显示建议使用补零函数确保两位数显示
  3. 对于跨页面倒计时,可以考虑使用全局状态管理如vuex
  4. 服务端时间同步问题需要考虑时差校正

示例代码:完整倒计时组件

<template>
  <view class="countdown">
    {{ formatTime }}
  </view>
</template>

<script>
export default {
  data() {
    return {
      count: 60,
      timer: null
    }
  },
  computed: {
    formatTime() {
      const minutes = Math.floor(this.count / 60)
      const seconds = this.count % 60
      return `${minutes}:${seconds < 10 ? '0' + seconds : seconds}`
    }
  },
  methods: {
    start() {
      this.timer = setInterval(() => {
        if(this.count <= 0) {
          clearInterval(this.timer)
          this.$emit('end')
          return
        }
        this.count--
      }, 1000)
    },
    reset() {
      clearInterval(this.timer)
      this.count = 60
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>

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

相关文章

uniapp消息推送

uniapp消息推送

uniapp消息推送实现方法 uniapp支持多种消息推送方式,包括uniPush、个推、极光推送等。以下为常见实现方案: uniPush(官方推荐) uniapp官方提供的推送服务,基于DClou…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

uniapp开发电视应用

uniapp开发电视应用

开发环境准备 确保已安装HBuilderX最新版本,这是uniapp官方推荐的开发工具。安装Node.js环境,用于依赖管理和打包构建。准备Android Studio或Xcode用于调试和打包TV应…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

uniapp隐藏右侧滚动条

uniapp隐藏右侧滚动条

隐藏右侧滚动条的方法 在UniApp中隐藏右侧滚动条可以通过CSS样式实现,适用于H5、小程序等平台。以下是几种常见的方法: 全局样式设置 在App.vue的全局样式中添加以下CSS代码,适用于所有…

uniapp 画板

uniapp 画板

uniapp 实现画板功能的方法 在 uniapp 中实现画板功能,可以通过 canvas 组件结合触摸事件来完成。以下是一个基本的实现方案: 基本画板实现 在 template 中添加 canva…