重新启动setInterval

所以我有一个计时器旋转一组图像5秒钟。 因此,我在文档发布时运行它。

$(document).ready(function() { var intervalID=setInterval(function(){ rotate(); }, 5000); }); 

旋转function只是旋转图像。 但是,我还允许用户手动选择他们正在查看的图像。 因此我需要取消SetInterval,然后再次在5秒后重新开始

我想要做的是取消间隔然后通过这样做开始它

 $('a').click(function(){ clearInterval(intervalID); intervalID=setInterval(function(){ rotate(); }, 5000); }); 

但是,代码似乎没有像我希望的那样重置间隔。

只需将intervalID为全局变量,方法是在所有函数之外声明它。

使用当前代码,其范围仅限于$(document).ready()方法,因此可能会导致您描述的问题。

如果在.ready()范围内声明了intervalID变量,则以下内容应该起作用(未经测试):

 $(document).ready(function() { var rotate = function() { ... }, intervalID = setInterval(rotate, 5000); $('a').click(function() { clearInterval(intervalID); intervalID = setInterval(rotate, 5000); }); }); 

好吧,看起来你在.ready()处理程序的匿名函数中本地声明了interverID 。 我实际上想知道为什么你没有在你的点击事件处理程序中遇到引用错误 ,因为那里不能知道intervalID

您需要确保此变量可用,并且确实具有两个函数的共享上下文 。 最简单的方法是,在脚本周围创建一个匿名的自调用方法,并将该变量声明为超出范围。

 (function _myPrivateContext($, window, document, undefined) { var intervalID = null; $(document).ready(function() { intervalID = setInterval(rotate, 5000); }); $('a').click(function(){ clearInterval(intervalID); intervalID = setInterval(rotate, 5000); }); }(jQuery, window, document));