回答:
SafariがwebkitTransitionEndコールバックを実装していることを知っています。このコールバックは、遷移を伴う要素に直接アタッチできます。
それらの例(複数行に再フォーマット):
box.addEventListener(
'webkitTransitionEnd',
function( event ) {
alert( "Finished transition!" );
}, false );
this
コールバック内の要素と関係があります。しかし、これは必須パラメーターなので、この場合は要件を満たしています。
useCaptureMode
。イベントが発生すると、2つのフェーズがあります。最初のフェーズはキャプチャモード、2番目のフェーズはバブルモードです。キャプチャモードでは、イベントはbody要素から指定された要素に下降します。その後、バブルモードに入り、その逆を行います。最後のfalseパラメータは、イベントリスナーをバブルモードで発生させることを指定します。これの1つの用途は、バブルハンドラーで必要になる直前にイベントハンドラーをアタッチすることです。=)37signals.com/svn/posts/…–
はい、そのようなものがブラウザでサポートされている場合、遷移が完了するとイベントがトリガーされます。ただし、実際のイベントはブラウザによって異なります。
webkitTransitionEnd
transitionend
msTransitionEnd
oTransitionEnd
ただし、これがwebkitTransitionEnd
常に起動するとは限らないことに注意してください。これは何度も気になり、アニメーションが要素に影響を与えない場合に発生するようです。これを回避するには、期待どおりにトリガーされない場合にタイムアウトを使用してイベントハンドラーを起動するのが理にかなっています。この問題に関するブログ投稿は、こちらから入手できます。http ://www.cuppadev.co.uk/the-trouble-with-css-transitions/ <-500内部サーバーエラー
これを念頭に置いて、私はこのイベントを次のようなコードのチャンクで使用する傾向があります。
var transitionEndEventName = "XXX"; //figure out, e.g. "webkitTransitionEnd"..
var elemToAnimate = ... //the thing you want to animate..
var done = false;
var transitionEnded = function(){
done = true;
//do your transition finished stuff..
elemToAnimate.removeEventListener(transitionEndEventName,
transitionEnded, false);
};
elemToAnimate.addEventListener(transitionEndEventName,
transitionEnded, false);
//animation triggering code here..
//ensure tidy up if event doesn't fire..
setTimeout(function(){
if(!done){
console.log("timeout needed to call transition ended..");
transitionEnded();
}
}, XXX); //note: XXX should be the time required for the
//animation to complete plus a grace period (e.g. 10ms)
注:遷移イベントの終了名を取得するには、 ブラウザでCSS3遷移関数を正規化するにはどうすればよいですか?。
注:この質問は次にも関連しています:-CSS3移行イベント
transitionEndedHandler
でtransitionEnded
(または変更transitionEnded
によってtransitionEndedHandler
中addEventListener
やremoveEventListener
通話transitionEnded
中transitionEndedHandler
)
transitionEnded
という意味で使った ばかりだと思うtransitionEndedHandler
。
私は次のコードを使用していますが、ブラウザが使用する特定の終了イベントを検出するよりもはるかに簡単です。
$(".myClass").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd',
function() {
//do something
});
あるいは、ブートストラップを使用する場合は、単純に行うことができます
$(".myClass").one($.support.transition.end,
function() {
//do something
});
これは、bootstrap.jsに次のものが含まれているためです。
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend',
'transition' : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false, $el = this
$(this).one($.support.transition.end, function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
})
}(jQuery);
jQuery.transitプラグイン、CSS3の変換および遷移のためのプラグインは、スクリプトからあなたのCSSアニメーションを呼び出して、あなたにコールバックを与えることができます。
これはtransitionend
イベントで簡単に実現できます。こちら
のドキュメントをご覧ください。簡単な例:
document.getElementById("button").addEventListener("transitionend", myEndFunction);
function myEndFunction() {
this.innerHTML = "Transition event ended";
}
#button {transition: top 2s; position: relative; top: 0;}
<button id="button" onclick="this.style.top = '55px';">Click me to start animation</button>