Javascript中的效果队列

时间:2011-01-12 11:57:42

标签: javascript jquery jquery-animate

我正在尝试创建一个在队列中工作的效果,以便每个效果仅在前一个效果完成后才开始。我很成功,但我确信有一种更清洁的方式。

这是我到目前为止所做的:

$("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();
                        });
                    });
                });
            });
        });
    });
});

必须有一个更清洁的方式,对吧?

提前做了很多事。

3 个答案:

答案 0 :(得分:7)

正如你在问题中所说。使用.queue()

http://api.jquery.com/queue

并检查:

What are queues in jQuery?

答案 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);

但它都是非常硬编码的....