SetTimeout延迟在jquery幻灯片中没有按预期工作

时间:2012-08-05 16:51:49

标签: javascript jquery html css css3

这是我的代码.... http://jsfiddle.net/KQ8gW/ 在这个我已经将我的setTimeout放置到1分钟,但在此之前调用该函数。为什么这样呢????

3 个答案:

答案 0 :(得分:2)

您正在立即调用该函数,而不是传递对该函数的引用,并且您正在重复设置间隔。因此,您传递给setInterval()的是执行Slide(c,n)的返回值,而不是稍后将调用的函数。因此它立即被调用,只有一次。

要解决此问题,请更改此信息:

setInterval(Slide(c,n),60000);

到此:

setTimeout(function() {Slide(c,n)},60000);

如果这是我的代码,我甚至不会使用计时器 - 我会使用这样的动画完成功能:

var n = $("#slideShow div img").length;
var c = 0;
Slide(c,n);

function Slide(c,n){
    c = ++c % n;
    $("#slideShow div").animate(
        {left:-500*c}, 
        3000, 
        function() {Slide(c,n)}
    );
}​

工作演示:http://jsfiddle.net/jfriend00/nykd3/

答案 1 :(得分:0)

您已设置间隔,而非超时。尝试使用setTimeout(function, time)

答案 2 :(得分:0)

你正在调整间隔内的间隔......等等。

您每分钟都会定期运行该功能,每次运行该功能时,您都会设置一个新的间隔,循环直到无穷无尽。

将间隔放在函数外部,并使用函数调用它以避免评估,如下所示:

var n = $("#slideShow div img").length, c = 0;

Slide(c, n);
setInterval(function() { Slide(c, n); }, 60000);

function Slide(c, n) {
    c = ++c % n;
    $("#slideShow div").animate({
        left: -500 * c
    }, 7000);
}​