我正在寻找一个拍卖网站的倒数计时器,当用户更改本地计算机时钟时,该计时器不会改变。
我已经将Keith Woods用于服务器同步,但想知道是否有人与任何其他人有任何经验,因为即使该脚本在用户更改时钟时也会发生变化。
我想要像eBay这样的东西。
干杯
答案 0 :(得分:2)
根据您希望的准确度(毫秒等),您的倒计时功能上的简单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通信的部分,只包括它的回调。这只是一个可以实现的方法的示例,没有真正的错误检查,可能还有其他我没有注意到的问题,请将其作为指南。