基于本地时钟的Javascript事件触发器
Javascript event triggers based on local clock
我有一个场景,一台客户端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');
}
}
为什么不从另一个窗口启动一个窗口?这样,父窗口将完全控制动画何时开始,因为它们处于相同的过程中。不需要时钟。
相关文章:
- 每次只在第一个上单击事件触发器
- 2个Analytics帐户中的Google Analytics事件触发器跟踪
- jQuery 可排序事件触发器
- 使用 Hammer.js 的程序化事件触发器
- Javascript/AngularJS:如何使点击事件触发器成为父级
- jQuery特定的事件触发器
- Unity 3d事件触发器将gameobject.active设置为false
- 上的jquery inputmask事件触发器未完成
- 如何在PlayN中添加对自定义JavaScript事件触发器的支持
- dom对象创建javascript和jquery后的事件触发器
- google将v3事件触发器映射到json创建的标记上
- 通过事件触发器/按钮单击将参数传递给 javascript 函数
- 自定义打印功能,打印内容未显示在第一个事件触发器上
- 如何使用带有复选框的事件触发器访问 ID 数组
- 如何使用事件触发器和自定义属性获取元素的子元素
- 如何在使用循环时调用 jquery 事件触发器
- IE 中浮点和内联块元素的 focusin 事件触发器
- 页面中的 Angularjs-Accordion 事件触发器
- JS切换事件触发器无法正常工作
- 使用事件触发器如何在输入更改时将值传递给函数