我有以下for循环:

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


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

我努力了:

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

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


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

最佳答案

作为使用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(在大多数情况下)是单线程的,而且这种方法会阻塞渲染线程,从而使您的浏览器无法访问,因此也会出现问题。

08-19 04:58