2

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

共 5 个元素

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

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

4

4 回答 4

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);    
})();
于 2010-10-29T16:51:11.037 回答
0

看这个例子:http: //juixe.com/techknow/index.php/2005/10/28/put-javascript-to-sleep/

于 2010-10-29T16:32:11.133 回答
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);
于 2010-10-29T16:38:13.550 回答
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循环。它不断地重新启动该过程。

于 2010-10-29T17:16:27.310 回答