vue2 时间倒计时

由于项目需要开发一个倒计时的功能,后台传送了一个结束时间的字段。
因此,这里封装了一个组件:

<template>
    <p class="p2" :endTime="endTime" :callback="callback" :endText="endText">
        <i>{{hours}}</i>:<i>{{minutes}}</i>:<i>{{seconds}}</i>.<i>{{milliseconds}}</i>
    </p>
</template>
<script>
    export default {
        data(){
           return {
               hours:0,
               minutes:0,
               seconds:0,
               milliseconds:0,
               pageTimer:{}
           }
        },
        props:{
            endTime:{
                type: String,
                default :'0'
            },
            endText:{
               type : String,
               default:'已结束'
            },
            callback : {
                type : Function,
                default :''
            }
        },
        mounted () {
            this.countdowm(this.endTime);

        },
        watch:{
            endTime(curVal,oldVal){
                if(this.pageTimer){   //清除所有的定时器,防止传过来的值变化出现闪烁的问题
                    for(let each in this.pageTimer){
                        clearInterval(this.pageTimer[each]);
                    }
                }
                this.countdowm(curVal,oldVal);
            }
        },
        methods: {
           countdowm(timestamp,oldtime){
                let self = this;
                this.pageTimer["timer1"] = setInterval(function(){
                    let nowTime = new Date();
                    let endTime = new Date(timestamp * 1000);
                    let t = endTime.getTime() - nowTime.getTime();
                    if(t>0){
                        let hour=Math.floor(t/3600000);
                        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;
                        self.hours = hour;
                        self.minutes = min;
                        self.seconds = sec;
                        let millSeconds = 9;
                        self.pageTimer["timer2"] = setInterval(function () {
                            self.milliseconds = millSeconds;
                            millSeconds--;
                            if (millSeconds < 0) {
                                millSeconds = 9
                            }
                        }, 100);
                    }else{
                        clearInterval(self.pageTimer["timer1"]);
                        self.hours = 0;
                        self.minutes = 0;
                        self.seconds = 0;
                        self.milliseconds = 0;
                        self._callback();
                    }
                },1000);
            },
           _callback(){
               if(this.callback && this.callback instanceof Function){
                     this.callback(...this);
               }
           }
        }
    }
</script>

组件调用:

<count-down v-if="end_date" :endTime="1536981712" :callback="callback" endText="已经结束了"/>

import countDown from '../../components/time.vue'

这样就完成了,效果图如下

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值