时间:2019-05-03 来源:小程序工厂
开始的时候 new Date()获取当前毫秒数,setInterval 200ms 去获取毫秒数,根据差值来设置秒数,而不是setInterval 1000ms 去把数字-1
这个没有理解
截图看看你倒计时的方法呢
getRightTime: function (endTime) { var nowDate = new Date(); var endDate = endTime; var leftTime = endDate - nowDate.getTime(); if (leftTime / (3600 * 1000) >= 72) { eturn; } else { var d = Math.floor(leftTime / (24 * 3600 * 1000));//计算天数 var leave1 = leftTime % (24 * 3600 * 1000); var h = Math.floor(leave1 / (3600 * 1000)); var leave2 = leave1 % (3600 * 1000); var m = Math.floor(leave2 / (60 * 1000)); var leave3 = leave2 % (60 * 1000); var s = Math.round(leave3 / 1000); this.setData({ leftTime: this.checkTime(d) + '天' + this.checkTime(h) + '时' + this.checkTime(m) + '分' + this.checkTime(s) + '秒' }, ()=> {}) }},timer = setInterval(() => { that.getRightTime(start); if (that.data.leftTime == '00:00:01') { clearInterval(timer); })}, 1000)
把循环的时间改为200ms,这样平均误差要小一点。。
倒计时都是拿1秒来做间隔,要是200ms,不好弄啊
200ms取一次,差别到1秒了就setData,没到就不管呗。。
这...
要不了解下 Wuss Weapp 的倒计时组件怎么写的吗 https://github.com/phonycode/wuss/blob/master/dist/w-countdown/index.js
我都是用setTimeout做倒计时
占了两条,所以倒计时,频繁的去setData不好
this.setData({},function(){
// 回调
})
setData是同步的
setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。
https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page.html#pageprototypesetdataobject-data-function-callback
setInterval,如果你没有进行其它频繁的操作,就是按照时间执行,应该不会一快一慢
也不知道是哪里出了问题
代码?
getRightTime: function (endTime) {
var nowDate = new Date();
var endDate = endTime;
var leftTime = endDate - nowDate.getTime();
if (leftTime / (3600 * 1000) >= 72) {
eturn;
} else {
//天
var d = Math.floor(leftTime / (24 * 3600 * 1000));//计算天数
//时
var leave1 = leftTime % (24 * 3600 * 1000);
var h = Math.floor(leave1 / (3600 * 1000));
//分
var leave2 = leave1 % (3600 * 1000);
var m = Math.floor(leave2 / (60 * 1000));
//秒
var leave3 = leave2 % (60 * 1000);
var s = Math.round(leave3 / 1000);
this.setData({
leftTime: this.checkTime(d) + '天' + this.checkTime(h) + '时' + this.checkTime(m) + '分' + this.checkTime(s) + '秒'
}, ()=> {})
}
},
timer = setInterval(() => {
that.getRightTime(start);
if (that.data.leftTime == '00:00:01') {
clearInterval(timer);
})
}, 1000)
每个循环减1000不行吗?你这样每次都使用new Date获取时间,且不说中间有什么操作,就算执行代码也会消耗几微秒的时间,本来单线程js的定时器都无法保证准确时间,只能看起来一秒减1