我有一个场景,一台客户端PC将驱动多个LCD显示器,每个显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据。
我需要确保两个浏览器可以在同一时间同步旋转,否则它们会在不同时间生成动画。
所以我的问题是 - 我可以触发jquery根据本地PC时钟替换内容吗?
例如,每次时钟秒== 0,显示版本1,每次时钟秒== 30,显示版本2等?
答案 0 :(得分:6)
根据我的经验,这是让计时器尽可能接近时钟时间的最精确方式:
// get current time in msecs to nearest 30 seconds
var msecs = new Date().getTime() % 30000;
// wait until the timeout
setTimeout(callback, 30000 - msecs);
然后,在回调中,一旦完成所有操作,再次执行相同操作以触发下一个事件。
使用setInterval
会导致其他问题,包括时钟漂移。基于当前时间的计算考虑了执行回调本身的时间。
您还需要使用Date().getTime()
来确定要显示的动画帧。
整件事情看起来像这样:
function redraw() {
var interval = 30000;
// work out current frame number
var now = new Date().getTime();
var frame = Math.floor(now / interval) % 2; // 0 or 1
// do your stuff here
.. some time passes
// retrigger
now = new Date().getTime();
setTimeout(redraw, interval - (now % interval));
}
redraw();
的工作演示
答案 1 :(得分:0)
答案是:是的,你可以。
Date.getTime()
监控时间答案 2 :(得分:0)
为什么不从另一个窗口启动一个窗口 - 这样父窗口就可以完全控制动画的开始时间,因为它们位于相同的进程中。无需时钟。
答案 3 :(得分:-1)
你可以这样做。 这样,无论何时启动不同的浏览器,它们的旋转都将保持同步。
var t=setInterval("check()",1000);
function check(){
var d = new Date();
if(d.getSeconds() == 0)
{
alert('do something');
} else if (d.getSeconds() == 30)
{
alert('do something else');
}
}