0

我正在为一个拍卖网站寻找一个倒数计时器,当用户更改他们的本地计算机时钟时,它不会改变。

我已经使用 Keith Woods 与服务器同步,但想知道是否有人对其他任何人有任何经验,因为即使当用户更改时钟时脚本也会更改。

我想要像 eBay 那样的东西。

干杯

4

1 回答 1

2

根据您希望它有多准确(毫秒等),倒计时功能上的简单setIntervalDoc )可以得到一些准确的结果,并且不能被某人改变他们的时钟而改变。

由于此方法依赖于 javascript 的执行,它可能会因页面加载速度或其他导致它不同步的原因而延迟。但是,如果您让它每分钟左右对网络服务器进行一次 AJAX 调用,它可以重新同步客户端上的时间,以确保没有发生明显的延迟。

很简单:

var currentTime = [6,50,20]; //[Hours,Minutes,Seconds]
var intervalId;
function updateTime()
{
    currentTime[2]--;

    if (currentTime[0] == 0 && currentTime[1] == 0 && currentTime[2] == 0)
    {
        clearInterval(intervalId);

        //do your processing of countdown end here
    }

    if (currentTime[2] == -1)
    {
        currentTime[2] = 59;
        currentTime[1]--;
    }
    if (currentTime[1] == -1)
    {
        currentTime[1] = 59;
        if (currentTime[0] > 1)
        {
            currentTime[0]--;
        }
    }

    //do your processing of current time here (ie. display on screen)
}

//Use this function as the callback to an AJAX request to the server
//This will sync the time correctly
function ajaxCurrentTime(AJAXResponse)
{
    //For this example, we will say the AJAXResponse is a JSON string
    currentTime = JSON.parse(AJAXResponse);
}

intervalId = setInterval(updateTime,1000);

我将第一个承认这不是完美的解决方案,因为最多可能存在几秒钟的不准确,但它不会触及客户端机器的日期/时间,因此不会受到他们改变时间的影响.

我提供的代码不包括实际进行 AJAX 通信的部分,只是它的回调。这只是可以实现的一种方式的示例,没有真正的错误检查,并且可能有其他我没有注意到的问题,将其用作指南。

于 2013-04-28T07:19:42.323 回答