JavaScript 中的 setTimeout

发布于 2024-11-26 20:32:37 字数 682 浏览 0 评论 0原文

我正在使用以下代码对 javascript 中的某个过程进行动画处理:

  var direction = $('#rightControl');
  function animate()
  {
      if (hover) return;

      if (!direction.is(':visible'))
      {
          if (direction.attr('id') == 'rightControl') direction = $('#leftControl');
          else direction = $('#rightControl');
      }

      doMove(direction);
  }

  // Animate slider!
  setInterval(animate, 2500);

直到元素 #rightControl 存在于页面:每 2.5 秒调用 animate() 函数并移动我的 div(在 >doMove)。当 #rightControl 消失时,我将方向更改为 #leftControl,...

一切都很好,但是当页面在后台运行一段时间(例如,4-5 分钟) ),动画变得疯狂,每次调用100-200毫秒。怎么了?

I'm animating some process in javascript with this code:

  var direction = $('#rightControl');
  function animate()
  {
      if (hover) return;

      if (!direction.is(':visible'))
      {
          if (direction.attr('id') == 'rightControl') direction = $('#leftControl');
          else direction = $('#rightControl');
      }

      doMove(direction);
  }

  // Animate slider!
  setInterval(animate, 2500);

Until element #rightControl exists at page: call animate() function each 2.5 seconds and move my div (inside doMove). When the #rightControl dissappears I change direction into #leftControl, ...

Everything works cool, but when page is in background a few time (for example, 4-5 minutes), the animation becomes crazy and call each 100-200 ms. What's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏大泽ㄣ 2024-12-03 20:32:37

嗯,setInterval 只是每隔 * 秒向调用堆栈添加一些内容。如果某些 JavaScript 执行了几秒钟,调用堆栈上可能会出现一些情况。我猜如果页面也在后台,这种情况也可能发生。检查它是否与 setTimeouts 一起使用(因此 1 或函数调用来启动它,1 在函数末尾)。

Hmm, setInterval just adds something to the call-stack every * seconds. If there is some javascript being executed for a few seconds, things might build up on the call stack. That could happen if the page is in background too I guess. Check if it works with setTimeouts (so 1 or a function call to start it, 1 at the end of the function).

宁愿没拥抱 2024-12-03 20:32:37

我可以猜测的是,要么 setInterval() 在别处被意外调用,要么 animate() 被意外调用。

试试这个小提琴: http://jsfiddle.net/fXJbW/
仅使用 animate()setInterval() 即可正常工作。问题出在你的代码的其余部分。

您可以做的另一件事是:

var timeout;

function animate()
{
    // do stuff here
    clearTimeout(timeout);
    timeout=setTimeout(animate,2500);
}

What I can guess is that either setInterval() is accidentally being called elsewhere, or animate() is.

Try this fiddle: http://jsfiddle.net/fXJbW/
It works fine with just animate() and setInterval(). The problem is in the rest of your code.

Another thing you can do is this:

var timeout;

function animate()
{
    // do stuff here
    clearTimeout(timeout);
    timeout=setTimeout(animate,2500);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文