2 lines
2.4 KiB
JavaScript
2 lines
2.4 KiB
JavaScript
import{o as t,e,w as i,T as s,f as m,n as a,g as n,t as r,k as o,j as h}from"./index-d0750414.js";import{_ as u}from"./_plugin-vue_export-helper.1b428a4d.js";function c(t,e=2){let i=`${t}`;for(;i.length<e;)i=`0${i}`;return i}const l=1e3,T=6e4,f=36e5,d=24*f;function p(t){return{days:Math.floor(t/d),hours:Math.floor(t%d/f),minutes:Math.floor(t%f/T),seconds:Math.floor(t%T/l),milliseconds:Math.floor(t%l)}}const g=u({name:"u-count-down",emits:["change","end","finish"],props:{timestamp:{type:[String,Number],default:0},format:{type:String,default:"DD:HH:mm:ss"},autoStart:{type:Boolean,default:!0},customStyle:{type:[String,Object],default:""}},data:()=>({timer:null,timeData:p(0),formattedTime:"0",runing:!1,endTime:0,remainTime:0}),watch:{timestamp(t){this.reset()},format(t,e){this.pause(),this.start()}},mounted(){this.init()},methods:{init(){this.reset()},start(){this.runing||(this.runing=!0,this.endTime=Date.now()+this.remainTime,this.toTick())},toTick(){this.format.indexOf("SSS")>-1?this.microTick():this.macroTick()},macroTick(){this.clearTimeout(),this.timer=setTimeout(()=>{const t=this.getRemainTime();var e,i;e=t,i=this.remainTime,(Math.floor(e/1e3)!==Math.floor(i/1e3)||0===t)&&this.setRemainTime(t),0!==this.remainTime&&this.macroTick()},30)},microTick(){this.clearTimeout(),this.timer=setTimeout(()=>{this.setRemainTime(this.getRemainTime()),0!==this.remainTime&&this.microTick()},30)},getRemainTime(){return Math.max(this.endTime-Date.now(),0)},setRemainTime(t){this.remainTime=t;const e=p(t);this.$emit("change",e),this.formattedTime=function(t,e){let{days:i,hours:s,minutes:m,seconds:a,milliseconds:n}=e;return-1===t.indexOf("DD")?s+=24*i:t=t.replace("DD",c(i)),-1===t.indexOf("HH")?m+=60*s:t=t.replace("HH",c(s)),-1===t.indexOf("mm")?a+=60*m:t=t.replace("mm",c(m)),-1===t.indexOf("ss")?n+=1e3*a:t=t.replace("ss",c(a)),t.replace("SSS",c(n,3))}(this.format,e),t<=0&&(this.pause(),this.$emit("end"),this.$emit("finish"))},reset(){this.pause(),this.remainTime=this.timestamp,this.setRemainTime(this.remainTime),this.autoStart&&this.start()},pause(){this.runing=!1,this.clearTimeout()},clearTimeout(){clearTimeout(this.timer),this.timer=null}},beforeUnmount(){this.clearTimeout()}},[["render",function(u,c,l,T,f,d){const p=o,g=h;return t(),e(g,{class:"u-count-down"},{default:i(()=>[s(u.$slots,"default",{},()=>[m(p,{class:"u-count-down__text",style:a(l.customStyle)},{default:i(()=>[n(r(f.formattedTime),1)]),_:1},8,["style"])])]),_:3})}]]);export{g as _};
|