| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 
							- import { VantComponent } from '../common/component';
 
- import { isSameSecond, parseFormat, parseTimeData } from './utils';
 
- function simpleTick(fn) {
 
-     return setTimeout(fn, 30);
 
- }
 
- VantComponent({
 
-     props: {
 
-         useSlot: Boolean,
 
-         millisecond: Boolean,
 
-         time: {
 
-             type: Number,
 
-             observer: 'reset',
 
-         },
 
-         format: {
 
-             type: String,
 
-             value: 'HH:mm:ss',
 
-         },
 
-         autoStart: {
 
-             type: Boolean,
 
-             value: true,
 
-         },
 
-     },
 
-     data: {
 
-         timeData: parseTimeData(0),
 
-         formattedTime: '0',
 
-     },
 
-     destroyed() {
 
-         clearTimeout(this.tid);
 
-         this.tid = null;
 
-     },
 
-     methods: {
 
-         // 开始
 
-         start() {
 
-             if (this.counting) {
 
-                 return;
 
-             }
 
-             this.counting = true;
 
-             this.endTime = Date.now() + this.remain;
 
-             this.tick();
 
-         },
 
-         // 暂停
 
-         pause() {
 
-             this.counting = false;
 
-             clearTimeout(this.tid);
 
-         },
 
-         // 重置
 
-         reset() {
 
-             this.pause();
 
-             this.remain = this.data.time;
 
-             this.setRemain(this.remain);
 
-             if (this.data.autoStart) {
 
-                 this.start();
 
-             }
 
-         },
 
-         tick() {
 
-             if (this.data.millisecond) {
 
-                 this.microTick();
 
-             }
 
-             else {
 
-                 this.macroTick();
 
-             }
 
-         },
 
-         microTick() {
 
-             this.tid = simpleTick(() => {
 
-                 this.setRemain(this.getRemain());
 
-                 if (this.remain !== 0) {
 
-                     this.microTick();
 
-                 }
 
-             });
 
-         },
 
-         macroTick() {
 
-             this.tid = simpleTick(() => {
 
-                 const remain = this.getRemain();
 
-                 if (!isSameSecond(remain, this.remain) || remain === 0) {
 
-                     this.setRemain(remain);
 
-                 }
 
-                 if (this.remain !== 0) {
 
-                     this.macroTick();
 
-                 }
 
-             });
 
-         },
 
-         getRemain() {
 
-             return Math.max(this.endTime - Date.now(), 0);
 
-         },
 
-         setRemain(remain) {
 
-             this.remain = remain;
 
-             const timeData = parseTimeData(remain);
 
-             if (this.data.useSlot) {
 
-                 this.$emit('change', timeData);
 
-             }
 
-             this.setData({
 
-                 formattedTime: parseFormat(this.data.format, timeData),
 
-             });
 
-             if (remain === 0) {
 
-                 this.pause();
 
-                 this.$emit('finish');
 
-             }
 
-         },
 
-     },
 
- });
 
 
  |