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
作为句柄。 0
是setInterval
的无效返回值,因此您可以依赖它。 (如果你愿意,可以使用undefined
或null
,只需确保检查它们。)
在您调用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);