当前位置:首页 > 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提供了内置的倒计时组件,可以直接使用:

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

使用第三方库如day.js

对于更复杂的倒计时需求,可以引入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:

uniapp倒计时

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是一款基于Vue.js的跨平台开发框架,支持一次开发,多端部署。开发者可以通过编写一套代码,发布到iOS、Android、Web以及各种小程序平台(如微信、支付宝、百…

uniapp使用npm

uniapp使用npm

uniapp中使用npm的方法 uniapp支持通过npm安装和管理第三方依赖包,以下是具体操作步骤: 安装Node.js环境 确保本地已安装Node.js(建议使用LTS版本),安装后会自动包含n…

uniapp发布到应用商店

uniapp发布到应用商店

发布到苹果App Store 确保开发者账号已注册并加入Apple Developer Program,年费99美元。在Xcode中生成iOS发布证书(.p12)和描述文件(Provisioning…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中…

丸子uniapp

丸子uniapp

丸子UniApp简介 丸子UniApp是一个基于UniApp框架开发的移动应用解决方案,通常用于快速构建跨平台应用(如微信小程序、H5、Android/iOS等)。其核心特点是利用UniApp的“一次…

uniapp 数据

uniapp 数据

uniapp 数据管理方法 本地存储 使用 uni.setStorageSync 和 uni.getStorageSync 进行本地数据持久化存储。适合保存用户偏好设置或小型数据。 // 存储数…