Jquery setInterval()不起作用

我正在尝试创建一种幻灯片。

问题:

function slides(x) { $("#irack").stop().animate({"left": x}, 20); }; setInterval(slides(-30),300); 

此代码仅将div向左移动1次。

为什么不每300毫秒移动div?

您需要将代码包装为在函数中间隔运行:

 function slides(x) { $("#irack").stop().animate({"left": x}, 20); }; setInterval(function() { slides(-30); }, 300); 

真的是指setInterval吗? 这将持续发生,每300ms左右。 如果您希望它只发生一次,请改用setTimeout

更新 :如果您想稍后取消该间隔,则需要将句柄保存到变量:

 // Somewhere appropriate, have a variable for the handle var handle = 0; // 0 = not running ... // Starting: handle = setInterval(...); ... // Stopping: if (handle != 0) { clearInterval(handle); } handle = 0; 

注意在未设置时使用0作为句柄。 0setInterval的无效返回值,因此您可以依赖它。 (如果你愿意,可以使用undefinednull ,只需确保检查它们。)

在您调用setInterval时,正在调用slide方法内联更改调用,如下所示:

 setInterval(function(){slides(-30);},300); 

它不起作用的原因是因为你正在调用你传递给setInterval的函数

您需要将函数包装在匿名函数中以将参数作为间隔的一部分传递。

 function slides(x) { $("#irack").stop().animate({"left": x}, 20); }; setInterval(function(){slides(-30)},300); 

请注意slides(-30)现在如何包装在anon函数中。

哦,我发现了问题:D

 $("#irack").stop().animate({"left": x}, 20); 

问题是“x”是一个常量,它将“左”改为x并保持这种方式。

我应该这样做:

 x=$("#irack").offset().left+x; $("#irack").stop().animate({"left": x}, 20); 

非常感谢指出“包装”的东西:D。

最短的答案是:

 setInterval(function(){ $("#irack").stop().animate({"left": -30}, 20) },300);