我正在为一个拍卖网站寻找一个倒数计时器,当用户更改他们的本地计算机时钟时,它不会改变。
我已经使用 Keith Woods 与服务器同步,但想知道是否有人对其他任何人有任何经验,因为即使当用户更改时钟时脚本也会更改。
我想要像 eBay 那样的东西。
干杯
根据您希望它有多准确(毫秒等),倒计时功能上的简单setInterval
(Doc )可以得到一些准确的结果,并且不能被某人改变他们的时钟而改变。
由于此方法依赖于 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 通信的部分,只是它的回调。这只是可以实现的一种方式的示例,没有真正的错误检查,并且可能有其他我没有注意到的问题,将其用作指南。