我认为Deferreds在这里不会有很大帮助。当然,您可以.promise()
在 jQuery 实例上为每个 [效果] 队列获取一个,并且由于该方法,您甚至可以将 jQuery 对象直接传递给$.when
,但我认为回调链 - 对于连续动画,您需要一些链 - 可以更轻松:
function chainedFadeIn($el, order, callback) {
if (!order.length)
return callback();
$el.eq(order.shift()).fadeIn(500, function() {
chainedFadeIn($el, order, callback); // notice we removed the first element
});
}
chainedFadeIn($(this), [3,2,6,4,0,1,5], function() {
// do something
});
带有 Promises 的替代版本:
function getFadeInChain($el, order) {
if (!order.length)
return order; // or anything else
return $el
.eq(order.shift())
.fadeIn(500)
.promise()
.then(getFadeInChain.bind(null, $el, order));
}
getFadeInChain($(this), [3,2,6,4,0,1,5]).done(function() {
// do something
});
jsfiddle.net 上的演示:回调,延迟