nuxt封装日历倒计时剩余时间

<template >
<div v-if="show">
    <div class="flex">
        <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 mr-1">
            <path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
        </svg>
        <span>倒计时:{{ `${d || 0}天${h || 0}小时${m || 0}分${s || 0}秒` }}</span>
    </div>
</div>
</template>
<script>
export default {
  props: {
      endTime: {
          type: String,
          default: ''
      },
  },
  data() {
      return {
          d: '',
          h: '',
          m: '',
          s: '',
          timer: null,
          show:false
      }
  },
  mounted() {
      clearTimeout(this.timer);
      this.countTime();
  },
  beforeDestroy() {
      clearTimeout(this.timer);
  },
  methods: {
      countTime: function () {
          //获取当前时间
          let date = new Date()
          let now = date.getTime()

          //设置截止时间
          let endDate = new Date(this.endTime);
          let end = endDate.getTime()

          //时间差
          let leftTime = end - now;

          //定义变量 d,h,m,s保存倒计时的时间
          if (leftTime >= 0) {
              this.d = Math.floor(leftTime / 1000 / 60 / 60 / 24)//天数我没用到,暂且写上
              this.h = Math.floor((leftTime / 1000 / 60 / 60) % 24)
              this.m = Math.floor((leftTime / 1000 / 60) % 60)
              this.s = Math.floor((leftTime / 1000) % 60)
              //递归每秒调用countTime方法,显示动态时间效果
              this.timer = setTimeout(this.countTime, 1000)
              this.show=true
          }
      },
  },
}

</script>

以上内容存保存到到项目下的组件目录components/DateDown.vue

在需要的地方调用即可

<YDateDown :endTime=”netpc.com.cn” />

开始用setInterval实现发现会提示无法在客户端执行该函数,网上找到用回调setTimeout方式可行。

此条目发表在服务器分类目录,贴了标签。将固定链接加入收藏夹。

发表回复