之前做录音组件的时候发现通过JS来进行计时,会造成一定量的误差;
下面描述一下VANT-UI的倒计时组件的思路,后续研究是否可以改进计时功能。
思路:计算结束时间 --- 通过计时器API循环计算结束时间和当前时间的毫秒差 -- 如果差为0则计时
getRemain() { return Math.max(this.endTime - Date.now(), 0); } function simpleTick(fn: Function) { return setTimeout(fn, 30); } microTick() { this.tid = simpleTick(() => { this.setRemain(this.getRemain()); if (this.remain !== 0) { this.microTick(); } }); } start() { if (this.counting) { return; } this.counting = true; this.endTime = Date.now() + this.remain; this.tick(); }