据我所知,$.each()
是一个同步函数,所以我认为,不管怎么说,必须通过某种技术来延迟循环遍历数组的步骤。
我还没找到合适的方法。我怎么能正确设置它的步骤超时?
更新:
问题,为什么我需要这个,是循环中的步骤数和计算是巨大的,并且它们使异步函数太慢。我想为它们节省一些处理器速度,并通过这种延迟来定义“优先级”。我正在使用非回调函数,主要是循环步骤中的jQuery.css()。
重要:
我正在寻找一种技术来设置延迟IN BETWEEN步骤,减少计算量,不用循环设置大量的超时,将按时间运行。
答案 0 :(得分:7)
我建议不要使用.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(){})
扩展名中。
答案 1 :(得分:2)
根据您的情况,这样的事情可以起作用:
$('.some-results').each(function(i) {
$(this).delay(500 * i).someAction();
});
在此示例中,您使用数组的索引号(i
)使每次迭代比最后一次延迟500ms。希望这会有所帮助。
注意:如果不清楚,someAction()可以是您计划对元素执行的任何操作。可以是动画,获取值等等。
答案 2 :(得分:1)
试用此代码:
<强> HTML 强>
<div class="result"></div>
<div class="result"></div>
<div class="result"></div>
<强>的Javascript 强>
$('.result').each(function(i) {
setTimeout(function(){ alert(i);},5000*i);
});
工作JSFiddle