当前位置:首页 > 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:

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开发中,多环境配置能有效区分开发、测试、生产等不同环境的API地址、密钥等参数,避免手动修改代码导致的错误。 创建环境配置文件 在项目根目录下创建env.js或c…

uniapp如何赋值

uniapp如何赋值

uniapp 赋值方法 在 uniapp 中,赋值操作可以通过多种方式实现,具体取决于数据类型和场景。 数据绑定赋值 在模板中使用 {{}} 进行数据绑定,通过修改 data 中的值实现动态更新。…

uniapp指南

uniapp指南

开发环境搭建 下载HBuilderX作为官方推荐的开发工具,支持Windows和Mac系统。安装后创建uni-app项目,选择模板(如默认模板、Hello Uni-app等)。确保Node.js版本在…

精通uniapp

精通uniapp

掌握UniApp的基础知识 UniApp是一个基于Vue.js的跨平台开发框架,支持一次开发多端部署(如H5、小程序、App等)。核心概念包括Vue语法、组件化开发、条件编译(针对不同平台适配)以及U…

uniapp 美颜

uniapp 美颜

uniapp 美颜实现方法 在uniapp中实现美颜功能可以通过多种方式完成,以下是一些常见的方法: 使用原生插件 uniapp支持调用原生插件实现美颜效果,适用于对性能要求较高的场景。需要开发原生…

uniapp yuv

uniapp yuv

YUV 格式在 UniApp 中的应用 在 UniApp 中处理 YUV 格式数据通常涉及视频编解码、图像处理或摄像头数据采集。YUV 是一种颜色编码系统,常用于视频传输和图像处理,与 RGB 格式相…