我正在尝试创建一个在队列中工作的效果,以便每个效果仅在前一个效果完成后才开始。我很成功,但我确信有一种更清洁的方式。
这是我到目前为止所做的:
$("tr:last td:nth-child(1) div").slideUp(200, function() {
$("tr:last td:nth-child(2) div").slideUp(200, function() {
$("tr:last td:nth-child(3) div").slideUp(200, function() {
$("tr:last td:nth-child(4) div").slideUp(200, function() {
$("tr:last td:nth-child(5) div").slideUp(200, function() {
$("tr:last td:nth-child(6) div").slideUp(200, function() {
$("tr:last td:nth-child(7) div").slideUp(200, function() {
$("tr:last").remove();
});
});
});
});
});
});
});
必须有一个更清洁的方式,对吧?
提前做了很多事。
答案 0 :(得分:7)
答案 1 :(得分:4)
delay
:来实现的
var divs = $("tr:last td div");
divs.each(function(idx, el) {
$(this).delay(idx * 200).slideUp(200, function(){
if (idx === divs.length - 1) { // 0-based index
$("tr:last").remove()
}
});
});
答案 2 :(得分:2)
你可以制作一个递归函数:
function slide(i) {
if(i < 8) {
$("tr:last td:nth-child(" + i + ") div").slideUp(200, function() {
slide(i+1);
});
}
else {
$("tr:last").remove();
}
}
slide(1);
但它都是非常硬编码的....