如何使用for循环的setInterval或setTimeout?

时间:2010-10-29 16:28:53

标签: javascript loops settimeout setinterval

我试图在某些代码运行时设置一个间隔,但只需要根据元素的数量来设置。这是一个简单的例子:

总共5个元素

对于找到的每个元素,每20秒运行一次代码。

有人可以给我一个基本的例子,如何使用纯JavaScript做到这一点?我尝试过的所有内容只是一次执行所有代码而不是一次执行一个元素。

4 个答案:

答案 0 :(得分:3)

让我们假设你在谈论数组元素或DOM集合

(function() {
   var arr = [...],
       len = arr.length;


   (function doProcess() {
       if (len--) {
           /* do something with arr[len] */
           setTimeout(doProcess, 20000);
       }
   })();    
})();

编辑: 如果由于任何原因无法反转数组,只需使用下一个版本

(function() {
   var arr = [...],
       len = arr.length;


   (function doProcess(i) {
       if (i) {
            console.log(len - i);
           /* do something with arr[len - i] */
           setTimeout(function() { doProcess(--i); }, 20000);
       }
   })(len);    
})();

答案 1 :(得分:0)

答案 2 :(得分:0)

你必须定义一个函数,在函数内部需要设置一个超时。像这样:

var els = [1, 2, 3, 4, 5];

((function process_els(el_index) {
  var el = els[el_index];

  // do stuff to el here
  console.log(el);
  // do stuff to el above

  if (el_index + 1 < els.length) {
    setTimeout(function() { process_els(el_index + 1); }, 20000);
  }
})(0);

答案 3 :(得分:0)

以下是我使用jQuery为图像设置动画所做的一些代码:

var enter = 500;
var show = 4000;
var exit = 300;
var direction1 = "right"; 
var direction2 = "left";
var logo = document.getElementById('Box1').getElementsByTagName('img');
var Num = $('#Box1 img').length;
var time_each = (enter+show+exit);
function startBox1(){
for(x=0;x<=Num-1;x++){
Box1(x);
}
}  
function Box1(x){
var buffer = time_each*x;
$(logo[x]).delay(buffer).show("slide", { direction: direction1 }, enter).delay(show).hide("slide", { direction: direction2 }, exit);
}
$(function(){
startBox1();
setInterval("startBox1()",(time_each)*Num);
});

诀窍是设置一个缓冲区,该缓冲区等于每个动画所用的时间乘以当前动画的索引。 FOR循环立即运行每个代码; .delay()动作和缓冲区变量使得它看起来好像每个动画一个接一个地发生。然后setInterval()在每个动画完成后调用FOR循环。它会不断重新启动过程。