Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于本地时钟的Javascript事件触发器_Javascript_Jquery - Fatal编程技术网

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

基于本地时钟的Javascript事件触发器,javascript,jquery,Javascript,Jquery,我有一个场景,一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据 我需要确保两个浏览器可以同步到完全相同的时间旋转,否则它们将在不同的时间设置动画 所以我的问题是-我可以触发jquery以根据本地PC时钟替换内容吗 例如,每次时钟秒==0,显示版本1,每次时钟秒==30,显示版本2等?答案是:可以 使用Date.getTime()监视时间 每30秒触发一次js函数 为什么不从另一个窗口启动一个窗口?这样,父窗口将完全控制动

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

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

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


例如,每次时钟秒==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秒。这太糟糕了。你真的建议他根据时间的变化进行投票吗?这不会让两个浏览器保持同步,因为我无法确保它们在同一时间进行投票