Deferredsがここで大きな助けになるとは思いません。確かに、.promise()
jQuery インスタンスで for every [effect] キューを取得できます。そのメソッドのおかげで、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
});
Promise を使用した代替バージョン:
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 のデモ: callbacks、Deferred