アニメーションが同時に実行されるように見える理由は、jQueryのアニメーションがすべて非同期に実行されるためです。だから、あなたのコードがやっていることは基本的にすべてのアニメーションを開始することです、そして、あなたのブラウザは実際のアニメーションをほぼ同時に扱います。
jQueryのアニメーション関数は、アニメーションが終了した後に呼び出されるコールバックの使用をサポートしています。後のアニメーションがこのコールバックで確実に行われるようにすることで、アニメーションを強制的に強制的に実行することができます。私は.fadeOut
のコールバックとしてanimate()
に別のコールをキューイングしてい
$('#button').click(function(){
var i;
var $elems = [];
for (i = 1; i < 4; ++i) {
$elems.push($('#img' + i));
}
var animate = function() {
var $elem;
if ($elems.length) {
$elem = $elems.shift();
$elem.fadeIn("slow").delay(1000).fadeOut("slow", animate);
}
// if the $elems has been cleared out, we're done and this function won't be requeued
};
animate();
});
注:
は、ここでは、あなたの要件(jsfiddle here)を実装することができます一つの方法です。この関数は再実行されますが、$elems
配列の状態は各関数呼び出しで変更されるため、各要素のアニメーションは1回実行されます。配列がクリアされると、関数はもう一度実行され、要素がすべてアニメ化されていることを確認します。その場合は、再度キューに入れずに戻ります。
のような新しい画像番号でコールバックを呼び出していますか? fadeInは同期呼び出しであるため、必ずしも完了するまで待つ必要はありません。 – dchhetri
@ user814628、私はあなたが "同期呼び出し"ではなく "非同期呼び出し"と言っていると思うと思います。 – Brad
@ user814628:おそらく、ユーザーが本当にjQueryの '.fadeIn'やその他のエフェクト関数が非同期である。非同期実行は、JavaScript、特に現代のJSフレームワークでは一般的ですが、誰かがいつかそれについて最初に学ばなければなりません。これは、jQueryのアニメーション効果だけでなく、AJAXやBackbone.jsモデルのフェッチ(実際にはAJAXの抽象でもありますが、気にすることはありません)を理解する上でも有効な質問です。ユーザーに知らないことを知らせないでください。代わりに、答えを教えて:-) –