我有以下循环:
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]);
这似乎不起作用,它只是延迟了250毫秒,然后在循环中迭代
作为使用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(在大多数情况下)是单线程的,这样的方法会阻塞渲染线程,从而使浏览器无法访问。
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();