首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进度栏同步javascript到服务器时间?

进度栏同步javascript到服务器时间?
EN

Stack Overflow用户
提问于 2013-07-26 02:41:43
回答 1查看 73关注 0票数 0

我有一个对象,它包含了一些关于条形图进展的数据,但是它始终停留在99%,并且不会继续,我相信这是因为客户端时间不会和服务器时间一样精确到足以做到这一点。所以我不知道怎么解决。

这两个定时器是创建服务器端并发送到客户端的。

代码语言:javascript
复制
myOjb[i].end: 1374805587 //seconds since epoch for when 100% is made
myObj[i].strt: 1374805527 //seconds since epoch when it started

计算百分比的函数:

代码语言:javascript
复制
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);
}

我如何将两者同步在一起,这样时间就更准确了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-26 03:14:15

编辑:最初的答案是基于一个错误的假设。我认为正在发生的事情是,基本上,将百分比设置为100的块可能会被跳过。如果在一次迭代中,per值< 99.5但> 88.5,则会发生这种情况。在这种情况下,圆角per的值为99。然后,一秒钟后,当函数再次被调用时,由于myObj[i].end > nowfalse,将不会输入外部if块。下面的代码将确保,如果时间过期,并且由于上述情况,myObj[i].percentage是< 100,那么它将被设置为100,并像另一个if块一样返回。

代码语言:javascript
复制
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;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17872008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档