据我所知, $.each()
是一个同步函数,所以我认为,以某种方式它必须是可能的 - 通过某种技术 - 延迟循环的步骤通过数组。
我还没有找到合适的方法。我如何正确设置其步骤的超时?
更新:
问题是,为什么我需要这个,是循环中的步骤数和计算量很大,它们使异步函数太慢。我想为他们节省一些处理器速度,并通过这种延迟定义“优先级”。我在循环步骤中使用非回调函数,主要是 jQuery.css()。
重要:
我正在寻找一种技术来设置步骤之间的延迟,以减少计算量,而不是使用循环设置大量超时,从而按时间运行。
最佳答案
我建议不要使用.each()
,而是手动循环集合。:
HTML
<div class="foo">A</div>
<div class="foo">B</div>
<div class="foo">C</div>
<div class="foo">D</div>
<div class="foo">E</div>
Javascript
var collection = $('.foo');
if( collection.length > 0 ){
var i = 0;
var fn = function(){
var element = $(collection[i]);
console.log(i + ' (' + element.text() + ') : %o', element);
// Do whatever
if( ++i < collection.length ){
setTimeout(fn, 5000);
}
};
fn();
}
如果您愿意,可以相当容易地包装到 $('.foo').delayedEach(5000, function(){})
扩展中。
关于jquery - 定义 jQuery.each() 循环步骤之间的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800062/