Vue计时器和倒计时组件

34 篇文章 0 订阅
32 篇文章 0 订阅

vue代码

<template>
  <span :endTime="endTime" :endText="endText">
    <slot>
      {{ content }}
    </slot>
  </span>
</template>
<script>
export default {
  data() {
    return {
      content: '',
    }
  },
  props: {
	  // 时间戳
    startTime: {
      type: String,
      default: '',
    },
   	  // 时间戳
    endTime: {
      type: String,
      default: '',
    },
    endText: {
      type: String,
      default: '已结束',
    },
  },
  watch: {
    endTime() {
      this.countdowm(this.endTime)
    },
    startTime() {
      this.timer(this.startTime)
    },
  },
  mounted() {
    // this.countdowm(this.endTime)
    // this.timer(this.startTime)
  },
  methods: {
    //倒计时
    countdowm(timestamp) {
      let self = this
      let timer = setInterval(function () {
        let nowTime = new Date()
        let endTime = new Date(timestamp * 1000)
        let t = endTime.getTime() - nowTime.getTime()
        if (t > 0) {
          let day = Math.floor(t / 86400000)
          let hour = Math.floor((t / 3600000) % 24)
          let min = Math.floor((t / 60000) % 60)
          let sec = Math.floor((t / 1000) % 60)
          hour = hour < 10 ? '0' + hour : hour
          min = min < 10 ? '0' + min : min
          sec = sec < 10 ? '0' + sec : sec
          let format = ''
          if (day > 0) {
            format = `${day}天${hour}小时${min}分${sec}秒`
          }
          if (day <= 0 && hour > 0) {
            format = `${hour}小时${min}分${sec}秒`
          }
          if (day <= 0 && hour <= 0) {
            format = `${min}分${sec}秒`
          }
          self.content = format
        } else {
          clearInterval(timer)
          self.content = self.endText
        }
      }, 1000)
    },
    //累计增加计时器
    timer(timestamp) {
      let self = this
      let timer = setInterval(function () {
        let nowTime = new Date(timestamp * 1000)
        let endTime = new Date()

        let t = endTime.getTime() - nowTime.getTime()
        if (t > 0) {
          let day = Math.floor(t / 86400000)
          let hour = Math.floor((t / 3600000) % 24)
          let min = Math.floor((t / 60000) % 60)
          let sec = Math.floor((t / 1000) % 60)
          hour = hour < 10 ? '0' + hour : hour
          min = min < 10 ? '0' + min : min
          sec = sec < 10 ? '0' + sec : sec
          let format = ''
          if (day > 0) {
            format = `${day}天${hour}小时${min}分${sec}秒`
          }
          if (day <= 0 && hour > 0) {
            format = `${hour}小时${min}分${sec}秒`
          }
          if (day <= 0 && hour <= 0) {
            format = `${min}分${sec}秒`
          }
          self.content = format
        } else {
          clearInterval(timer)
          self.content = self.endText
        }
      }, 1000)
    },
  },
}
</script>

使用方法

计时器


import timer from '@/components/jsq.vue'
export default {
  components: {
    timer
  },
<div class="livebroadcast">直播时长:<timer :startTime="liveInfo.starttime"></timer></div>

效果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值