CSS3アニメーションの完了時にコールバックはありますか?


91

css3アニメーションの場合にコールバック関数を実装する方法はありますか?JavaScriptアニメーションの場合は可能ですが、css3でそれを行う方法が見つかりません。

私が見ることができる1つの方法は、アニメーション期間の後にコールバックを実行することですが、アニメーションが終了した直後に必ず呼び出されるとは限りません。ブラウザのUIキューによって異なります。より堅牢な方法が必要です。どんな手掛かり?



たとえば、遷移後に要素を非表示にするなど、単純なCSSアクションを実行する場合は、コールバックする必要はなく、アニメーションのキーフレームを使用して問題を解決できます。
Madmadi

回答:


130

はいあります。コールバックはイベントであるため、イベントリスナーを追加してキャッチする必要があります。これはjQueryの例です:

$("#sun").bind('oanimationend animationend webkitAnimationEnd', function() { 
   alert("fin") 
});

または純粋なjs:

element.addEventListener("webkitAnimationEnd", callfunction,false);
element.addEventListener("animationend", callfunction,false);
element.addEventListener("oanimationend", callfunction,false);

ライブデモ:http : //jsfiddle.net/W3y7h/


3
IE10の場合は 'MSAnimationEnd'(msdn.microsoft.com/en-us/ie/hh272902#_CSSAnimationsを参照)
Martin Wittemann

6
それはtransitionend、ではありませんanimationend

13
@MichaelJonesいいえ、css3トランジション用です。問題はアニメーションについてでした。
joshvermaire 2012

4
@MartinWittemann IE10 finalはanimationend msdn.microsoft.com/en-us/library/ie/…を使用するようになりました。コード@Husky ChromeとFF 14で仕事をして、更新フィドル参照jsfiddle.net/W3y7hを
methodofaction

1
より完全なソリューションを持つstackoverflow.com/questions/9255279/…の複製
vanthome

3

CSS3の遷移/ブラウザーの互換性も処理するコールバックを行う簡単な方法は、jQuery Transit Pluginです。例:

//Pulsing, moving element
$("#element").click( function () {
    $('#element').transition({ opacity: 0, x: '75%' }, function () { $(this).transition({ opacity: 1, x: '0%' }).trigger("click"); });
});

JS Fiddleデモ


1
jQuery animateとAPI仕様を共有しているが、ハードウェアでレンダリングされたCSSアニメーションの滑らかさを利用していることのボーナスポイント。これで、すべての場所でjQuery animateをかなり置き換えました。
ローガン、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.