2012-08-05 54 views

回答

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)} 
    ); 
}​ 

工作D EMO:http://jsfiddle.net/jfriend00/nykd3/

+0

我尝试使用setTimeout的,但仍然它不工作..... HTTP:// jsfiddle.net/hCZ8b/1/ – iJade 2012-08-05 17:12:37

+0

@jade - 你读过我的答案了吗?我向你展示你还有什么需要解决的。我的建议将是我最后的实现,甚至不使用计时器。 – jfriend00 2012-08-05 17:16:13

+0

对不起,我的错误,我现在工作,thk – iJade 2012-08-05 17:34:33

0

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

0

要调用的间隔....等

您定期运行的功能每分钟,每次函数运行你设置一个新的时间间隔,循环,直到infinty内的区间内的区间超越。

地点以外的功能区间,并用一个函数调用它,以避免eval'ing,就像这样:

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); 
}​ 
+0

这不工作,因为值应该重置每次函数调用图像滑动, – iJade 2012-08-05 17:14:14