You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.9 KiB
105 lines
2.9 KiB
2 years ago
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
var component_1 = require("../common/component");
|
||
|
var utils_1 = require("./utils");
|
||
|
function simpleTick(fn) {
|
||
|
return setTimeout(fn, 30);
|
||
|
}
|
||
|
(0, component_1.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: (0, utils_1.parseTimeData)(0),
|
||
|
formattedTime: '0',
|
||
|
},
|
||
|
destroyed: function () {
|
||
|
clearTimeout(this.tid);
|
||
|
this.tid = null;
|
||
|
},
|
||
|
methods: {
|
||
|
// 开始
|
||
|
start: function () {
|
||
|
if (this.counting) {
|
||
|
return;
|
||
|
}
|
||
|
this.counting = true;
|
||
|
this.endTime = Date.now() + this.remain;
|
||
|
this.tick();
|
||
|
},
|
||
|
// 暂停
|
||
|
pause: function () {
|
||
|
this.counting = false;
|
||
|
clearTimeout(this.tid);
|
||
|
},
|
||
|
// 重置
|
||
|
reset: function () {
|
||
|
this.pause();
|
||
|
this.remain = this.data.time;
|
||
|
this.setRemain(this.remain);
|
||
|
if (this.data.autoStart) {
|
||
|
this.start();
|
||
|
}
|
||
|
},
|
||
|
tick: function () {
|
||
|
if (this.data.millisecond) {
|
||
|
this.microTick();
|
||
|
}
|
||
|
else {
|
||
|
this.macroTick();
|
||
|
}
|
||
|
},
|
||
|
microTick: function () {
|
||
|
var _this = this;
|
||
|
this.tid = simpleTick(function () {
|
||
|
_this.setRemain(_this.getRemain());
|
||
|
if (_this.remain !== 0) {
|
||
|
_this.microTick();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
macroTick: function () {
|
||
|
var _this = this;
|
||
|
this.tid = simpleTick(function () {
|
||
|
var remain = _this.getRemain();
|
||
|
if (!(0, utils_1.isSameSecond)(remain, _this.remain) || remain === 0) {
|
||
|
_this.setRemain(remain);
|
||
|
}
|
||
|
if (_this.remain !== 0) {
|
||
|
_this.macroTick();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
getRemain: function () {
|
||
|
return Math.max(this.endTime - Date.now(), 0);
|
||
|
},
|
||
|
setRemain: function (remain) {
|
||
|
this.remain = remain;
|
||
|
var timeData = (0, utils_1.parseTimeData)(remain);
|
||
|
if (this.data.useSlot) {
|
||
|
this.$emit('change', timeData);
|
||
|
}
|
||
|
this.setData({
|
||
|
formattedTime: (0, utils_1.parseFormat)(this.data.format, timeData),
|
||
|
});
|
||
|
if (remain === 0) {
|
||
|
this.pause();
|
||
|
this.$emit('finish');
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
});
|