vue-timer-countdown
Version:
2 lines (1 loc) • 2.86 kB
JavaScript
var vueTimerCountdown=function(){"use strict";var e=function(e,t){return e<10&&t?"0"+e:e.toString()},t=function(e,t){var n;"function"==typeof e&&(n=setTimeout((function o(){n=setTimeout(o,t),e()}),t)),this.stop=function(){clearTimeout(n)}};var n=function(e,t,n,o,i,r,s,a,d,c){"boolean"!=typeof s&&(d=a,a=s,s=!1);var u,h="function"==typeof n?n.options:n;if(e&&e.render&&(h.render=e.render,h.staticRenderFns=e.staticRenderFns,h._compiled=!0,i&&(h.functional=!0)),o&&(h._scopeId=o),r?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,d(e)),e&&e._registeredComponents&&e._registeredComponents.add(r)},h._ssrRegister=u):t&&(u=s?function(){t.call(this,c(this.$root.$options.shadowRoot))}:function(e){t.call(this,a(e))}),u)if(h.functional){var f=h.render;h.render=function(e,t){return u.call(t),f(e,t)}}else{var l=h.beforeCreate;h.beforeCreate=l?[].concat(l,u):[u]}return n};const o={props:{deadline:{type:Number,required:!0},completeZero:{type:Boolean,default:!0},leftSecond:{type:Number,default:0},ignoreDay:{type:Boolean,default:!0}},data:function(){return{day:0,hour:0,minute:0,second:0,setIntervalInstance:Object.freeze({stop:function(){}})}},computed:{deadlineTimestamp:function(){return Date.now()+1e3*this.deadline}},watch:{deadline:{handler:function(){var e=this;this.render(),this.getRestTime()>this.leftSecond?(this.setIntervalInstance.stop(),this.setIntervalInstance=new t((function(){e.render(),e.getRestTime()<=e.leftSecond&&(e.setIntervalInstance.stop(),e.$nextTick((function(){e.$emit("done")})))}),1e3)):this.$nextTick((function(){e.$emit("done")}))},immediate:!0}},beforeDestroy:function(){this.setIntervalInstance.stop()},methods:{render:function(){var t=this,n=this.getRestTime();this.ignoreDay?this.hour=e(Math.floor(n/3600),this.completeZero):(this.day=e(Math.floor(n/86400),this.completeZero),this.hour=e(Math.floor(n/3600%24),this.completeZero)),this.minute=e(Math.floor(n/60%60),this.completeZero),this.second=e(n%60,this.completeZero),this.$nextTick((function(){t.$emit("update",{day:t.day,hour:t.hour,minute:t.minute,second:t.second,restSecond:n})}))},getRestTime:function(){return Math.max(Math.round((this.deadlineTimestamp-Date.now())/1e3),0)}}};var i=function(){var e=this,t=e.$createElement;return(e._self._c||t)("span",[e._t("default",(function(){return[e.ignoreDay?e._e():[e._v(e._s(e.day)+":")],e._v(e._s(e.hour)+":"+e._s(e.minute)+":"+e._s(e.second)+"\n ")]}),{day:e.day,hour:e.hour,minute:e.minute,second:e.second})],2)};i._withStripped=!0;const r=n({render:i,staticRenderFns:[]},void 0,o,void 0,!1,void 0,!1,void 0,void 0,void 0);return r.install=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.component(t.component||"timer-countdown",r)},r}();