Javascript函数每次都会调用循环

标签 javascript jquery loops

我有一个名为rotator(id)的函数:这​​个函数为div设置动画,我可以使用不同的id调用这个函数来为不同的元素设置动画

实际上我使用了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);
}

但是它不起作用,因为它同时对所有动画进行动画处理,不允许先执行第一个并在第一个执行第二个之前继续,等等,等等,当执行结束或数字 5 开始其他时间时

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

最佳答案

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

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,如果这样更具可读性)。否则,每次调用 rotador 时,i 的值将为 5,因为 i 的值会在实际函数调用之前被修改。

关于Javascript函数每次都会调用循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735607/

相关文章:

jQuery — 删除展开的文本但保留元素?

java - 使用循环创建 java jbutton

javascript - 如何防止 Web 表单在 'Enter' 上提交

javascript - 使用 Requirejs 通过 Highcharts 加载 'theme' 和 'exporting' 模块

javascript - Angular 7 - 生产模式 : I can't navigate through page using the tab key

javascript - Codeacademy 类(class) JavaScript 的问题

javascript - 如何在 symfony2 中提交表单 ajax?

javascript - 如何在不使用浏览器内置PDF查看器的情况下在网络上查看PDF?

javascript - 在 for 循环中生成 .click 函数

python - 在列表中查找项目索引