当前位置:首页 > uni-app

uniapp倒计时组件

2026-02-05 16:57:26uni-app

uniapp倒计时组件实现方法

使用内置组件实现

uniapp本身没有专门的倒计时组件,但可以通过<text><view>结合定时器实现基础功能。

<template>
  <view>
    <text>{{countdown}}</text>
  </view>
</template>

<script>
export default {
  data() {
    return {
      countdown: '00:00:00',
      timer: null,
      totalSeconds: 3600 // 1小时倒计时
    }
  },
  mounted() {
    this.startCountdown()
  },
  methods: {
    startCountdown() {
      this.timer = setInterval(() => {
        if(this.totalSeconds <= 0) {
          clearInterval(this.timer)
          return
        }
        this.totalSeconds--
        this.formatTime()
      }, 1000)
    },
    formatTime() {
      const hours = Math.floor(this.totalSeconds / 3600)
      const minutes = Math.floor((this.totalSeconds % 3600) / 60)
      const seconds = this.totalSeconds % 60
      this.countdown = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>

使用第三方插件

uni-ui提供了uni-countdown组件,可以直接使用:

<template>
  <view>
    <uni-countdown 
      :show-day="false" 
      :hour="1" 
      :minute="0" 
      :second="0"
      @timeup="timeup">
    </uni-countdown>
  </view>
</template>

<script>
import uniCountdown from '@/components/uni-countdown/uni-countdown.vue'
export default {
  components: {uniCountdown},
  methods: {
    timeup() {
      uni.showToast({
        title: '倒计时结束',
        icon: 'none'
      })
    }
  }
}
</script>

自定义高级倒计时组件

创建更灵活的倒计时组件,支持多种格式和回调:

<template>
  <view class="countdown-container">
    <text v-if="showDay">{{days}}天</text>
    <text>{{hours}}</text>
    <text>:</text>
    <text>{{minutes}}</text>
    <text>:</text>
    <text>{{seconds}}</text>
  </view>
</template>

<script>
export default {
  props: {
    endTime: {
      type: [String, Number],
      required: true
    },
    showDay: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      days: '00',
      hours: '00',
      minutes: '00',
      seconds: '00',
      timer: null
    }
  },
  mounted() {
    this.startCountdown()
  },
  methods: {
    startCountdown() {
      this.timer = setInterval(() => {
        const now = new Date().getTime()
        const end = new Date(this.endTime).getTime()
        const distance = end - now

        if (distance < 0) {
          clearInterval(this.timer)
          this.$emit('timeup')
          return
        }

        this.days = Math.floor(distance / (1000 * 60 * 60 * 24)).toString().padStart(2, '0')
        this.hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)).toString().padStart(2, '0')
        this.minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)).toString().padStart(2, '0')
        this.seconds = Math.floor((distance % (1000 * 60)) / 1000).toString().padStart(2, '0')
      }, 1000)
    }
  },
  beforeDestroy() {
    clearInterval(this.timer)
  }
}
</script>

<style>
.countdown-container {
  display: flex;
  align-items: center;
}
</style>

注意事项

定时器需要在组件销毁时清除,避免内存泄漏。倒计时精度受系统性能影响,长时间运行的倒计时建议定期与服务器时间同步。对于需要极高精度的场景,可以使用WebSocket实时同步时间。

移动端页面进入后台时定时器可能被暂停,重新进入前台时需要检查时间差并更新倒计时状态。跨平台开发时注意不同平台的定时器行为差异。

uniapp倒计时组件

标签: 倒计时组件
分享给朋友:

相关文章

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div>…

vue实现倒计时功能

vue实现倒计时功能

vue实现倒计时功能 在Vue中实现倒计时功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用setInterval和clearInterval 创建一个倒计时组件,利用setInter…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

uniapp倒计时组件

uniapp倒计时组件

uniapp倒计时组件实现方法 使用内置组件实现 uniapp提供了<countdown>组件用于倒计时功能,支持自定义格式和样式。示例代码如下: <countdown :…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

uniapp 分页组件

uniapp 分页组件

uniapp 分页组件实现方法 在uniapp中实现分页功能,可以通过自定义组件或使用第三方组件库完成。以下是几种常见实现方式: 自定义分页组件 创建一个名为uni-pagination的组件,模…