setInterval()的问题;和clearInterval

时间:2010-07-28 14:06:38

标签: javascript jquery

我遇到涉及setinterval的问题。最好显示一个例子,所以这里有一个链接:

http://boudaki.com/testing/carouselTest

基本上我在制作这项工作时遇到了问题,就像我需要它一样。当页面加载时,内容每三秒旋转一次,右侧的编号按钮也会这样做。当你点击按钮时,按钮会延伸并停止动画 - 一切都很好。然后,当您单击按钮底部的小关闭按钮时,动画将恢复 - 一切都很好....但是当您再次点击编号按钮时,动画会继续运行。为什么呢?

相当多的代码,但setIntervals和clear interval是:

  • 第69行:在document.ready上启动动画off -assign timerId为全局var
  • 第87行:当用户点击该动画中的编号按钮clearinterval
  • 第102行:当用户点击关闭按钮时再次启动动画

就是这样....我只是不明白为什么它不会第二次停止动画???谁能明白为什么?

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

这是猜测,但请尝试将所有功能和变量纳入$(document).ready(function() {...})来电。

然后更改你的setInterval(),以便传入对函数的引用而不是eval的字符串:

timerId = setInterval( rotateForward, 3000 );

请务必更改所有内容。

说实话,我不知道为什么会这样,但是将变量设为本地可能有助于确保我们只处理一个版本的timerId

答案 1 :(得分:1)

我认为问题是timerId的范围。尝试更改警报('应立即停止');提醒('应该立即停止'+ timerId);

我敢打赌你会发现timerId总是一样的值。

答案 2 :(得分:1)

$ closeButton.click(function(){...});在你的循环内。该处理程序将被添加4次,因此当您单击关闭时,将添加4个计时器,再次打开菜单时仅清除1个。

答案 3 :(得分:0)

我唯一能想到的是......我很确定你不能把()放在setInterval调用中。它似乎确实起作用,但也许这是问题的一部分?很难说...但我至少从那里开始。

setInterval("rotateForward", 3000);

此外,也许每次启动前都可以尝试调用clearInterval。