私は$.when
いくつかの関数のフローを制御して遊んでいます。何かが機能しない理由と、機能するようにコーディングする方法を少し明確にする必要があります。
この不自然な例の最終目的は、インライン コールバックで達成できますが、個々の関数は例よりも複雑であるため、私が探しているソリューションではありません。最終的なコードは次のことを行う必要があります。
- アニメイトボックス2
- 一瞬待って
- ボックス 2 が終了し、短い一時停止があった後、ボックス 3 をアニメーション化する
- 一瞬待って
- 次に、ボックス 3 が終了して短い一時停止があった後、box1 をアニメーション化します。
- 最後に、すべてが完了した後にすべてが完了したことを示すアラート
私はこれの多くのバリエーションを試しましたが、私を最も悲しませるものを提示しようとします. ここで見つかったイライラするフィドル
アニメーションが終了した 3 つのボックスの後にメッセージを警告する、最も簡単な部分から始めました。
var a = $('.box1').animate({top: '100px'}, 2000),
b = $('.box2').animate({top: '100px'}, 1000),
c = $('.box3').animate({top: '100px'}, 2000);
$.when( a, b, c )
.done( function(){ alert( 'all done' )} );
問題ありません...私は実際に自分が何をしているのか知っていると思い始めました...いいえ!
次に、各変数をそれぞれの関数に分離できるはずだと考えました...しかし、最初にアラートが発生し、アニメーションの継続時間を無視して、アニメーションが突然終了しました!
function a(){
$('.box1').animate({top: '100px'}, 2000);
}
function b(){
$('.box2').animate({top: '100px'}, 1000);
}
function c(){
$('.box3').animate({top: '100px'}, 2000);
}
a();
b();
c();
$.when( a(), b(), c() )
.done( alert('all done') );
スコープのように見えますか?では、 をそれぞれの関数に移動して、次の関数を呼び出すとどうなるでしょうか$.when
... 現実の世界では、単一要素のアニメーションだけでなく、さらに多くのことが起こっています。
それはうまくいきませんでした!なぜ正確に?アラートが再び最初にポップアップします。は?そして、すべてのボックスが、指定されたよりも速く最終的な位置にアニメーション化されます。
function a(){
a = $('.box1').animate({top: '100px'}, 2000);
$.when( a ).done( alert( 'all boxes moved down' ) );
}
function b(){
b = $('.box2').animate({top: '100px'}, 1000);
$.when( b ).done( c() );
}
function c(){
c = $('.box3').animate({top: '100px'}, 2000);
$.when( c ).done( a() );
}
b();
jsfiddle update 100までにスタックオーバーフローが発生しました...しかし、私が考えたのを待って、それをさらにシンプルにし、各関数からすべてを削除し、起動するため$.when
に呼び出した後に1つ追加するだけです...残念ながら同時に起動しました! ここで何が欠けていますか?b()
c()
b()
c()
function a(){
a = $('.box1').animate({top: '100px'}, 2000);
}
function b(){
b = $('.box2').animate({top: '100px'}, 1000);
}
function c(){
c = $('.box3').animate({top: '100px'}, 2000);
}
$.when( b() ).done( c() );
私ができると思っていたという事実を気にしないでください
$.when( b() ).delay(1000).done( c() );
私はこれをいつ、完了したか、延期したかを理解しようと夢中になっています (必要に応じてさらに投稿できます:)!) 1 時間の jquery 開発者プレゼンテーションを見た後、この状況に実装できると思いました。 .. 最後に、私は単純なタスクを持っており、明らかに何かが欠けています! 提供された指示/説明をいただければ幸いです。
html と css
<div class='boxes'>
<div class='box box1'></div>
<div class='box box2'></div>
<div class='box box3'></div>
</div>
.box{width: 40px; height: 40px; background-color: green; position:absolute;}
.box1{left: 0px;}
.box2{left: 60px;}
.box3{left: 120px;}