基于本地时钟的Javascript事件触发器

Javascript event triggers based on local clock

本文关键字:事件 触发器 Javascript 于本地 时钟      更新时间:2023-09-26

我有一个场景,一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据。

我需要确保两个浏览器可以同步以在完全相同的时间旋转,否则它们将在不同的时间动画化。

所以我的问题是-我可以触发jquery来根据本地PC时钟替换内容吗?

例如,每次时钟秒数==0,显示版本1,每次时钟时间秒数==30,显示版本2等?

根据我的经验,这是使计时器尽可能接近时钟时间触发的最精确方法:

// 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();

工作演示http://jsfiddle.net/alnitak/JPu4R/

答案是:是的,你可以。

  • 使用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');
    }
}

为什么不从另一个窗口启动一个窗口?这样,父窗口将完全控制动画何时开始,因为它们处于相同的过程中。不需要时钟。