zoukankan      html  css  js  c++  java
  • vue实现倒计时的插件 时间戳 刷新 跳转 都不影响

    工作当中需要开发一个倒计时插件,于是开始网上先拿来主义,发现好多倒计时的插件,刷新都会变成从头再来,于是自己用vue2.0写了一个插件,测试已经通过,直接上代码

    如下是组件代码:

    <template>
        <span :endTime="endTime" :callback="callback" :endText="endText">
            <slot>
                {{content}}
            </slot>
        </span>
    </template>
    <script>
        export default {
            data(){
               return {
                content: '',
               }
            },
            props:{
                endTime:{
                    type: String,
                    default :''
                },
                endText:{
                   type : String,
                   default:'已结束'
                },
                callback : {
                    type : Function,
                    default :''
                }
            },
            mounted () {
              this.countdowm(this.endTime)
            },
            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;
                          self._callback();
                        }
                     },1000);
                   },
                   _callback(){
                   if(this.callback && this.callback instanceof Function){
                         this.callback(...this);
                     }
                }
            }
        }
    </script>

    下面是调用组件代码:

    <count-down endTime="1490761620" :callback="callback" endText="已经结束了"></count-down>

     引入上面代码之后 换要在vue的methods里加上callback回调函数

    ednTime 是时间结束之后的时间戳  callback是结束之后的回调  endText是结束之后的文字显示!

  • 相关阅读:
    LeetCoded第21题题解--合并两个有序链表
    入门数据结构与算法,看这一个就够了,知识点+LeetCode实战演练
    LeetCoded第242题题解--java--数组
    映射Map、队列Queue、优先级队列PriorityQueue
    链表LinkedList、堆栈Stack、集合Set
    bzoj1588: [HNOI2002]营业额统计
    bzoj3223: Tyvj 1729 文艺平衡树
    bzoj1503: [NOI2004]郁闷的出纳员
    hdu1700 Points on Cycle
    poj1981 Circle and Points
  • 原文地址:https://www.cnblogs.com/sichaoyun/p/6645042.html
Copyright © 2011-2022 走看看