2011-08-09 2 views
8

エレメントの値が変化している場合、エレメントがアニメーション化または検出しているかどうかを検出する手段ですか?jQueryアニメーションでアニメーションが検出されたら?

要素がアニメーション化されている場合、関数をトリガする必要があるためです。アニメのonCompleteではありません。選択された要素をアニメーション化されたとき

+0

いつトリガーしますか? –

答えて

21

次戻り真:

var isAnimating = $("#someid").is(':animated'); 

より詳細:

http://api.jquery.com/animated-selector/
及び/又は
http://api.jquery.com/animate/
ステップ:関数〜と呼ばれるアニメーションの各ステップを完了します。

+0

Andy私は疑似セレクタの理解を明確にすることができます:アニメーション。私が見ている動作は、要素がアニメーション化され始めたとき(:アニメーション化された)要素が開始点に戻ってもtrueであるということです。したがって、アニメーションがアニメーション位置に到達したときを検出するステップを使用しています。疑似セレクタのオン/オフを切り替える方法はありますか? – codepuppy

+0

@codepuppyこれは奇妙です、私はここでテストを行いました:http://jsfiddle.net/aPk3y/1/正しい値を返します。私は、操作する簡単な方法はないと思う:直接アニメーション。 – Andy

+0

この例ではAndyさんに感謝します。私はそれがあなたのために動作することがわかります。だから私はどこかでミスをしているに違いない。私は戻って試験をもう一度見直します。 – codepuppy

1

簡単な方法は、アニメーションが開始されるとすぐにtrueに設定されるグローバルブール値を追加することです。次に、終了時にfalseに設定するコールバック関数をアニメーションに追加します。

var running = false; 

$('#start').click(function(){ 

    running = true; 

    $('#target').animate({opacity: 0.5},'slow',function(){ 

     running = false; 

    }); 

}); 

編集:ありがとうございました。

+1

この方法を使用する場合は、競合状態が発生する可能性がある特殊な状況で使用する方法に注意してください。例: '1。スタートボタン(1)をクリックします。 - running = true - t = 0ms'' 2。スタートボタン(2)をクリックします。 - running = true - t = 200ms'' 3。アニメーション(1)終了 - 実行= false - t = 600ms' '4。アニメーション(2)running - running = false - 600ms

0

要素がアニメーション化されている場合、関数をトリガする必要があるためです。アニメのonCompleteではありません。 $(element).on(":animated", function(){ ... });以来

は、私が見ることができる唯一の方法は非常に簡単にあなたがあなたのアニメーションを実行したときに呼び出したい関数を実行することで、動作していないよう:

$(selector).animate(. . .); 
functionToCall(); //called with animate above 

別の解決策、あなたがありますアニメーションの開始を処理する独自のライブラリを作成し、上記の簡単な方法でアニメーションを開始すると必要な関数を呼び出すこともできます。

だから、いくつかの擬似コード:

var animation = new MyAnimationLibrary(function() { $(selector).animate(...) }); 
animation.onStart.push(function() { 
    alert('animation starts'); 
}); 
//then later in the code: 
animation.start(); 

は、その後すぐ上には、配列animation.onStartで関数を呼び出すと、あなたのアニメーションをトリガします。

関連する問題