2012-07-31 153 views
0

我已经函数调用rotator(id):此功能动画div,我可以调用不同的id此功能动画不同的元素JavaScript函数调用到每次循环

其实我用5型动物ID,1,2,3,4,5

而且对于电话我需要把:

rotador(1);rotador(2);rotador(3);rotador(4);rotador(5); 

这个问题是我想要在自动模式下旋转。为此,我想利用这个

for (i=0;i<=5;i++) { 
    setTimeout(rotador(i),2000); 
} 

但它不工作,因为它动画都在同一时间,没有让firt执行第一,继续第一之前去第二次,等等等等,去的时候结束或5号开始其他时间在一个

我的问题是这个,如果你能帮助我谢谢! :)问候

回答

0

使用的回调:

setTimeout(function() { 
    rotador(i) 
}, 2000) 
3

以来的setTimeout()不等待功能,然后再继续执行,你必须延迟设置为不同的项目,像不同的值2000 * (i + 1),而不是仅仅2000

编辑:是的,你需要的回调为Darhazer 2秒后显示

4

你实际上是调用rodator(I)功能,并计划执行rodator的结果。换句话说,你的代码现在equalent到:

for (i=0;i<=5;i++) { 
    var result = rotador(i); 
    setTimeout(result,2000); 
} 

你可以做到这一点通过创建回调函数:

for (i=0;i<=5;i++) { 
    setTimeout((function(i){ 
     return function(){ 
     rotador(i); 
     } 
    })(i),2000 * i); 
} 

,或者你可以调用rotador函数本身下一rodator :

var rotador = function(i){ 
    // your code 
    if (i < 5) { 
     setTimeout(function(){rotaror(i + 1);}, 2000); 
    } 
} 

:在第二示例中的闭合,需要调用该函数与正确值。我们创建一个匿名函数,并创建i作为局部作用域变量,该值不会被outerscope更改突变。 (我们可以在本地范围内将i重命名为n,如果这样会更具可读性)。否则,每次调用rotador时,i的值将为5,因为i的值在实际函数调用之前将被修改。

+0

在超时关闭中调用'rotador(i)'并将其作为新函数返回时,有什么区别?我很好奇:) – 2012-07-31 08:08:53

+2

我的价值。当我用特定的值定义时,我们正在返回一个新范围中的函数。如果我们只是在函数中调用它,它将具有外部作用域i的值,这将始终是最后一个 - 在这种情况下为5 – 2012-07-31 08:10:41

+0

Ahh非常感谢,我现在明白了 – 2012-07-31 08:14:17

1
rotationStep(1); 

function rotador(id) 
{ 
    console.log(id); 
} 

function rotationStep(currentId) 
{ 
    rotador(currentId); 
    var nextId = currentId<5 ? currentId+1 : 1; 
    setTimeout(function(){ rotationStep(nextId) },2000); //anonymous function is a way to pass parameter in IE 
} 
+0

没有适用于我幻灯片,:( – Fran 2012-07-31 09:23:47

+0

您删除了 功能罗多尔(编号) { 控制台。日志(ID); } ? – 2012-07-31 10:29:38