jQueryのNoob。
画像をフェードインおよびフェードアウトさせることを目的として、画像ギャラリーを循環しようとしています。
これが私のJSFiddleです。各画像fadeTo(arg1)を
クリックしてからfadeTo(args2)をクリックします。
しかし、私は彼らに一つずつ行ってもらいたい。
おそらく、チェーンに追加する必要がありますか?#gallery
delay
どんな助けでも大歓迎です。
jQueryのNoob。
画像をフェードインおよびフェードアウトさせることを目的として、画像ギャラリーを循環しようとしています。
これが私のJSFiddleです。各画像fadeTo(arg1)を
クリックしてからfadeTo(args2)をクリックします。
しかし、私は彼らに一つずつ行ってもらいたい。
おそらく、チェーンに追加する必要がありますか?#gallery
delay
どんな助けでも大歓迎です。
jQueryアニメーション(javascriptのほとんどのものと同様)は非同期です。つまり、アクションが終了する前に関数呼び出しが返されます。$('img').each
ある意味で、ループの各反復は次のように考えることができます。
this
バインドされた関数を呼び出しますimg
fade
は$(this)
次に、すべての反復が終了した後、ブラウザはアニメーションを画面上で同時に発生させ始めます(すべてがスケジュールされているため)。
fade
シーケンシャル動作を作成するには、関数にコールバックを与えることができます。
$('#gallery').click(function(evt) {
var remainingImages = $("img").toArray();
var processNext = function() {
var image = remainingImages.shift();
if(!image) return;
// Add the next iteration as a callback to the animation
$(image).fadeTo(500, .3).fadeTo(250, 1, processNext);
};
processNext();
});
次に、すべてのアニメーションを一度にスケジュールする代わりに、次のようになります。
img
要素がremainingImages
配列に格納されますprocessNext
関数が呼び出され、配列から最初の画像が削除されますfade
、アニメーションの終了後$(image)
に呼び出す必要のある関数(たまたまそれ自体)を提供します