Jquery setInterval()不起作用

时间:2010-12-29 16:03:12

标签: jquery function

我正在尝试制作一种幻灯片。

问题:

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

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

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

5 个答案:

答案 0 :(得分:21)

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

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;

请注意在未设置句柄时使用00是来自setInterval的无效返回值,因此您可以依赖它。 (如果您愿意,也可以使用undefinednull,请务必检查它们。)

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

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

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

注意slides(-30)现在如何包含在一个匿名函数中。

答案 3 :(得分:2)

哦,我发现了问题:D

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

问题是“x”是一个常数,它将“left”改为x并保持这种状态。

我应该这样做:

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

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

答案 4 :(得分:0)

最短的答案是:

header('Content-Type: text/html; charset=utf-8');