Javascript 如何按顺序将类添加到元素集合中?
我试图为集合中的每个元素添加一个类。我想向元素添加一个类,然后等待一两秒钟,然后将该类添加到集合中的下一个类 但当我使用这段代码时,它只是将类一次添加到每个类中Javascript 如何按顺序将类添加到元素集合中?,javascript,jquery,Javascript,Jquery,我试图为集合中的每个元素添加一个类。我想向元素添加一个类,然后等待一两秒钟,然后将该类添加到集合中的下一个类 但当我使用这段代码时,它只是将类一次添加到每个类中 for (var i = 0; i < article.length; i++) { setTimeout(function () { $(article[i]).addClass('something'; }, 10000); } 问题是,您正在设置一组从同一时刻开始10秒的超时
for (var i = 0; i < article.length; i++) {
setTimeout(function () {
$(article[i]).addClass('something';
}, 10000);
}
问题是,您正在设置一组从同一时刻开始10秒的超时,因此它们将在10秒后立即执行。您需要将它们链接在一起,以便每个超时处理程序调用下一个超时:
var i = 0;
var callback;
callback = function () {
if (i < article.length) {
$(article[i]).addClass('something');
++i;
setTimeout(callback, 10000);
}
};
setTimeout(callback, 10000);
试着这样做:
(function step(i){
if( i < article.length ){
$(article[i]).addClass('some_class');
setTimeout(function(){ step(i+1) },10000);
}
})(0);
你可以用
var x = setInterval("javascript",ms);
它会在每毫秒反复调用代码部分中的任何内容,直到调用
clearInterval(x);
函数一种无需链接调用的方法:
for (var i = 0; i < article.length; i++) {
(function(_i) {
setTimeout(function () {
$(article[_i]).addClass('something');
}, 10000+_i*1000);
})(i);
}
添加CSS类的开销不太可能大到足以使其无法按预期运行。使用$代理步骤,null,i+1,可以保持优雅,而不会欺骗不缩进函数:P@Esailija我不认为使用$.proxy更优雅。它们是扭转这种效应的一种方法吗?那么从最后一个开始移除类?谢谢。@mtwallet是的,使用var i=article.length-1;相反,对于条件,使用i>=0而不是i