0

我有一个函数叫做rotator(id):这个函数动画div,我可以用不同的方式调用这个函数id来动画不同的元素

实际上我使用了 5 个不同的 id ,1,2,3,4,5

对于通话,我需要 put :

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

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

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

但它不起作用,因为它同时进行动画处理,不要让 firt 执行第一个并在 first go second 等之前继续,等等,当 go 结束或数字 5 开始其他时间时

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

4

4 回答 4

4

您实际上是在调用 rodator(i) 函数,并安排在 2 秒后执行 rodator 的结果。换句话说,您的代码现在等于:

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。我们正在创建一个匿名函数,并创建i为局部范围变量,其值不会因外部范围更改而改变。(如果这样更易读,我们可以在本地范围内重命名i为)。n否则,i每次调用 rotador 时 的值都会是 5,因为 的值i会在实际函数调用之前被修改。

于 2012-07-31T08:03:58.343 回答
3

由于 setTimeout() 在继续之前不会等待函数执行,因此您必须为不同的项目将延迟设置为不同的值,2000 * (i + 1)而不是仅仅2000

编辑:是的,你需要 Darhazer 建议的回调

于 2012-07-31T08:03:02.037 回答
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
}
于 2012-07-31T08:07:31.087 回答
0

使用回调:

setTimeout(function() {
    rotador(i)
}, 2000)
于 2012-07-31T08:02:04.550 回答