基于本地时钟的Javascript事件触发器
我有一个场景,一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据 我需要确保两个浏览器可以同步到完全相同的时间旋转,否则它们将在不同的时间设置动画 所以我的问题是-我可以触发jquery以根据本地PC时钟替换内容吗基于本地时钟的Javascript事件触发器,javascript,jquery,Javascript,Jquery,我有一个场景,一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据 我需要确保两个浏览器可以同步到完全相同的时间旋转,否则它们将在不同的时间设置动画 所以我的问题是-我可以触发jquery以根据本地PC时钟替换内容吗 例如,每次时钟秒==0,显示版本1,每次时钟秒==30,显示版本2等?答案是:可以 使用Date.getTime()监视时间 每30秒触发一次js函数 为什么不从另一个窗口启动一个窗口?这样,父窗口将完全控制动
例如,每次时钟秒==0,显示版本1,每次时钟秒==30,显示版本2等?答案是:可以
- 使用
监视时间Date.getTime()
- 每30秒触发一次js函数
- 为什么不从另一个窗口启动一个窗口?这样,父窗口将完全控制动画启动的时间,因为它们处于相同的过程中。不需要时钟。您可以这样做。
这样,无论何时启动不同的浏览器,它们的旋转都是同步的
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');
}
}
根据我的经验,这是使计时器尽可能接近时钟时间触发的最精确方法:
// 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();
在
if(getSeconds()==0){}或if(getSeconds()==30){}
上运行演示,但不同步。我需要一个事件在秒数达到30秒或30秒时准确触发0@hud,我主要是告诉您关于getSeconds()
方法,顺便说一下,这是一个Date
对象的方法。您实际上不想轮询。@JustinSatyr如果使用getSeconds()
则计时的误差范围为1秒。这太糟糕了。你真的建议他根据时间的变化进行投票吗?这不会让两个浏览器保持同步,因为我无法确保它们在同一时间进行投票