延迟for循环中的javascript代码执行

时间:2014-04-17 16:00:11

标签: javascript jquery loops timeout delay

我有以下for循环:

for (var i = tileLog.length - 1; i >= 0; i--) {
    $('.' + tileLog[i]).mouseenter();
};

1< tileLog.legth< 1025

有没有办法延迟循环的每次迭代,以便每隔x毫秒触发一次mouseenter()?

我试过了:

function doSetTimeout(i) {
    setTimeout(function() { $('.' + i).mouseenter(); }, 250);
}

for (var i = tileLog.length - 1; i >= 0; i--)
  doSetTimeout(tileLog[i]);

这似乎不起作用,只是延迟了250ms然后遍历循环

2 个答案:

答案 0 :(得分:2)

作为使用setTimeout()的替代方法,您还可以使用setInterval()

在外部作用域中定义一个运行变量(就像在循环中运行i一样)。 在每次迭代中,除了调用函数外,还会减少运行变量。如果它低于零,则停止setInterval()``:

var index = tileLog.length - 1,
timer = setInterval( function(){

  $('.' + tileLog[index]).mouseenter();

  index -= 1;
  if ( index < 0 ) {
    clearInterval( timer );
  }
}, 250 );

没有实际的sleep()功能或类似功能。也会有问题,因为JavaScript(大多数情况下)是单线程的,这样的方法会阻止渲染线程,从而导致浏览器无法访问。

答案 1 :(得分:1)

JavaScript中没有睡眠等。所以你的超时方法是正确的。

var tileLog;
var i = titleLog.length - 1;

function func1() {
   $('.' + tileLog[i]).mouseenter();
   if (--i) {
     window.setTimeout(func1, 250);
   }
}

// and of course start the process
func1();