我有一个对象,其中包含一些关于条形图进展的数据,但它会一直停在99%并且不会继续,我相信它是因为客户端时间与服务器时间不一样准确到足以做到这一点。所以我不知道如何解决它。
这两个计时器在服务器端创建并发送给客户端。
myOjb[i].end: 1374805587 //seconds since epoch for when 100% is made
myObj[i].strt: 1374805527 //seconds since epoch when it started
计算百分比的函数:
function clocker() {
var now = new Date().getTime() / 1000;
for (var i in myObj) {
if (myObj[i].end > now) {
var remain = myObj[i].end - now;
var per = (now - myObj[i].strt) / (myObj[i].end - myBuildings[i].strt) * 100;
var per = fix_percentage(per); // stops > 100 and < 0 returns int if true
myObj[i].percentage = Math.ceil(per);
console.log(myObj[i].percentage); //reaches 99 max
if (myObj[i].percentage > 99) {
console.log('test'); //never occurs
return false;
}
break;
} else {
continue;
}
}
setTimeout(clocker, 1000);
}
function fix_percentage(per){
if(per>100)per=100;
if(per<0)per = 0;
return Math.round(per);
}
我如何将两者同步,以便时间更准确?
答案 0 :(得分:1)
编辑:原始答案基于错误的假设。我认为发生的事情是,基本上你的块将百分比设置为100可能会被跳过。如果在一次迭代中,per
的值<&lt; 1},则会发生这种情况。 99.5但是&gt; 88.5。在这种情况下,舍入的per
的值为99.然后,再次调用该函数一秒后,由于myObj[i].end > now
为false
,将不会输入外部的if块}。以下代码将确保如果时间到期且myObj[i].percentage
为&lt; 100因为上述情况,它将被设置为100并且如果阻止那么返回。
if (myObj[i].end > now) {
var remain = myObj[i].end - now;
var per = (now - myObj[i].strt) / (myObj[i].end - myBuildings[i].strt) * 100;
var per = fix_percentage(per); // stops > 100 and < 0 returns int if true
myObj[i].percentage = Math.ceil(per);
console.log(myObj[i].percentage); //reaches 99 max
if (myObj[i].percentage > 99) {
console.log('test'); //never occurs
return false;
}
break;
} else if ( (now >= myObj[i].end) && (myObj[i].percentage < 100) ) {
console.log('Time expired, but percentage not set to 100')
myObj[i].percentage = 100;
return false;
} else {
continue;
}