我有不同的课程,每个课程都有不同的背景。我试图每隔2秒在div #elm上切换背景。为什么以下内容不会在每个索引之间延迟2秒。他们都马上进来了。
var classes = ['class1', 'class2', 'class3'];
$.each(classes, function(index, val) {
$('#elm').removeAttr('class').addClass(val).delay(2000*index);
});
答案 0 :(得分:2)
delay()
仅适用于效果。
来自jQuery delay()文档
.delay()方法最适合 在排队的jQuery之间延迟 效果。因为它是有限的 - 它 例如,没有提供一种方法 取消延迟-.delay()不是 替换JavaScript的原生 setTimeout函数,可能更多 适用于某些用例。
由于addClass()
不是效果,因此可以包含fadeIn()效果并使用addclass作为回调函数。
var classes = ['class1', 'class2', 'class3'];
$.each(classes, function(index, ui) {
$('body').removeAttr('class').delay(1000).fadeIn(function() {
$(this).addClass(ui);
});
});
答案 1 :(得分:1)
这有效:
for (var i = 0; i < classes.length; i++) {
setTimeout (
(function(index){
return function(){
$('#elm').removeAttr('class').addClass(classes[index]);
};
})(i), 2000*i);
}
答案 2 :(得分:1)
延迟方法不仅适用于使用效果队列的事件,例如淡入和淡出等等吗?