vue 倒计时插件 -自用储存

```

//倒计时插件

        <countdown

          v-show="Myinformation.jinyan_time_start"

          :currentTime="Number(Myinformation.now_time)"

          :startTime="Number(Myinformation.jinyan_time_start)"

          :endTime="Number(Myinformation.jinyan_time_end)"

          :tipText="'禁言开始倒计时'" 

          :tipTextEnd="'禁言结束倒计时'"

          :dayTxt="'天'"

          :hourTxt="'时'"

          :minutesTxt="'分'"

          :secondsTxt="'秒'"

          ></countdown>

```


html结构

```


<template>

  <div>

    <p v-if="msTime.show">

      <span v-if="tipShow" class="no-bg">{{tipText}}:</span>

      <span v-if="!tipShow" class="no-bg">{{tipTextEnd}}:</span>

      <span v-if="msTime.day>0" class="no-bg">

        <span>{{msTime.day}}</span>

        <i>{{dayTxt}}</i>

      </span>

      <span>{{msTime.hour}}</span><i>{{hourTxt}}</i>

      <span>{{msTime.minutes}}</span><i>{{minutesTxt}}</i>

      <span>{{msTime.seconds}}</span><i>{{secondsTxt}}</i>

    </p>

  </div>

</template>

```

```javascript

<script>

import bus from "../plugins/bus.js";

export default {

    replace: true,

    data() {

        return {

            tipShow: true,

            msTime: {

                //倒计时数值

                show: false, //倒计时状态

                day: "", //天

                hour: "", //小时

                minutes: "", //分钟

                seconds: "" //秒

            },

            star: "", //活动开始时间

            end: "", //活动结束时间

            current: "" //当前时间

        };

    },

    watch: {

        currentTime: function(val, oldval) {

            this.gogogo();

        }

    },

    props: {

        //距离开始提示文字

        tipText: {

            type: String,

            default: "距离开始"

        },

        //距离结束提示文字

        tipTextEnd: {

            type: String,

            default: "距离结束"

        },

        //时间控件ID

        id: {

            type: String,

            default: "1"

        },

        //当前时间

        currentTime: {

            type: Number

        },

        // 活动开始时间

        startTime: {

            type: Number

        },

        // 活动结束时间

        endTime: {

            type: Number

        },

        //自定义显示文字:天

        dayTxt: {

            type: String,

            default: ":"

        },

        //自定义显示文字:时

        hourTxt: {

            type: String,

            default: ":"

        },

        //自定义显示文字:分

        minutesTxt: {

            type: String,

            default: ":"

        },

        secondsTxt: {

            type: String,

            default: ":"

        },

        //是否开启秒表倒计,未完成

        secondsFixed: {

            type: Boolean,

            default: false

        }

    },

    mounted() {

        // console.log(this);

        this.gogogo(this.currentTime);

    },

    methods: {

        gogogo: function() {

            //判断是秒还是毫秒

            this.startTime.toString().length === 10 ? (this.star = this.startTime * 1000) : (this.star = this.startTime);

            this.endTime.toString().length === 10 ? (this.end = this.endTime * 1000) : (this.end = this.endTime);

            if (this.currentTime) {

                this.currentTime.toString().length === 10

                    ? (this.current = this.currentTime * 1000)

                    : (this.current = this.currentTime);

            } else {

                this.current = new Date().getTime();

            }


            if (this.end < this.current) {

                /**

                 * 结束时间小于当前时间 活动已结束

                 */

                this.msTime.show = false;

                this.end_message();


            } else if (this.current < this.star) {

                /**

                 * 当前时间小于开始时间 活动尚未开始

                 */

                this.$set(this, "tipShow", true);

                setTimeout(() => {

                    this.runTime(this.star, this.current, this.start_message);

                }, 1);

            } else if (

                (this.end > this.current && this.star < this.current) ||

                this.star == this.current

            ) {

                /**

                 * 结束时间大于当前并且开始时间小于当前时间,执行活动开始倒计时

                 */

                this.$set(this, "tipShow", false);

                this.msTime.show = true;

                this.$emit("start_callback", this.msTime.show);

                setTimeout(() => {

                    this.runTime(

                        this.end,

                        this.current,

                        this.end_message,

                        true

                    );

                }, 1);

            }

        },

        runTime(startTime, endTime, callFun, type) {

            let msTime = this.msTime;

            let timeDistance = startTime - endTime;

            if (timeDistance > 0) {

                this.msTime.show = true;

                msTime.day = Math.floor(timeDistance / 86400000);

                timeDistance -= msTime.day * 86400000;

                msTime.hour = Math.floor(timeDistance / 3600000);

                timeDistance -= msTime.hour * 3600000;

                msTime.minutes = Math.floor(timeDistance / 60000);

                timeDistance -= msTime.minutes * 60000;

                //是否开启秒表倒计,未完成

                // this.secondsFixed ? msTime.seconds = new Number(timeDistance / 1000).toFixed(2) : msTime.seconds = Math.floor( timeDistance / 1000 ).toFixed(0);

                msTime.seconds = Math.floor(timeDistance / 1000).toFixed(0);

                timeDistance -= msTime.seconds * 1000;


                if (msTime.hour < 10) {

                    msTime.hour = "0" + msTime.hour;

                }

                if (msTime.minutes < 10) {

                    msTime.minutes = "0" + msTime.minutes;

                }

                if (msTime.seconds < 10) {

                    msTime.seconds = "0" + msTime.seconds;

                }

                let _s = Date.now();

                let _e = Date.now();

                let diffPerFunc = _e - _s;

                setTimeout(() => {

                    if (type) {

                        this.runTime(

                            this.end,

                            (endTime += 1000),

                            callFun,

                            true

                        );

                    } else {

                        this.runTime(this.star, (endTime += 1000), callFun);

                    }

                }, 1000 - diffPerFunc);

            } else {

                callFun();

            }

        },

        start_message() {

            this.$set(this, "tipShow", false);

            this.$emit("start_callback", this.msTime.show);

            setTimeout(() => {

                this.runTime(this.end, this.star, this.end_message, true);

            }, 1);

        },

        end_message() {

            bus.$emit('stopTime')

            this.msTime.show = false;

            if (this.currentTime <= 0) {

                return;

            }

            this.$emit("end_callback", this.msTime.show);

        }

    }

};

</script>

```


1


2


3


4


5


6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341