2013-07-26 23 views
0

我有一个对象,其中包含一些关于酒吧进度的数据,但它始终停留在99%,并且不会继续,我相信这是因为客户端时间与服务器时间不会像服务器时间一样足够准确。所以我不知道如何解决它。进度条同步javascript到服务器时间?

这2个定时器是在服务器端创建并发送给客户端的。

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); 
} 

我怎么能同步两个在一起,这样的时机更准确?

回答

1

编辑:原来的答案是基于一个糟糕的假设。我认为发生的事情是,基本上你的块设置百分比为100可能会被跳过。如果在一次迭代中,这会发生per的值是<99.5但是> 88.5。在这种情况下,四舍五入的per将具有值99.然后,一秒钟后,当函数被再次调用时,由于myObj[i].end > nowfalse,所以不会输入外部if块。下面的代码将确保如果由于上述情况而导致时间到期并且myObj[i].percentage为< 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; 
    } 
+0

当然,这整个答案是基于对fix_percentage行为的假设。 –

+0

我已添加功能我的Q,所以你可以检查? – Sir

+0

是的,错误是基于'if(myObj [i] .end>现在){'导致块/工作单元的**完成**(100%状态)大部分被跳过。 –