CSSでtransitionを使って楽にアニメーションできるようになったのはいいが、ゴリゴリのjQueryに絡ませるとアニメーションの終了を検知する必要があったりするので、その方法を調べてみました。
検知する方法
サンプル
青いボックスをクリックすると、ボックス上に「開始」のテキストが表示されるのと同時にボックスがフェードアウト。
フェードアウトが終了すると、ボックス上に「終了」のテキストが表示されるようになっています。
ソースコード
HTML
<body>
<div id="msg"></div>
<div id="box"></div>
</body>
CSS
#msg {
height: 1em;
padding-bottom: 1em;
}
#box {
width: 100px;
height: 100px;
background: #007AFF;
transition: all 3s;
cursor: pointer;
}
#box.active {
opacity: 0;
}
JavaScript
$(function() {
var transitionEndEvents = [
"webkitTransitionEnd",
"mozTransitionEnd",
"oTransitionEnd",
"transitionend"
];
var transitionEnd = transitionEndEvents.join(" ");
$("#box").on(transitionEnd, function() {
$("#msg").text("終了");
});
$("#box").on("click", function() {
$("#msg").text("開始");
$(this).toggleClass("active");
});
});
解説
transitionの終了検知は、「transitionend」のイベントを取得します。
基本的な書き方は以下の様になります。
$("要素").on("transitionend", function() {
// 処理
});
しかしブラウザによって実装が異なるようなので、各ブラウザのイベント名を列挙した書き方になります。
$("要素").on("webkitTransitionEnd mozTransitionEnd oTransitionEnd transitionend", function() {
// 処理
});
サンプルではこんな書き方しています。
var transitionEndEvents = [
"webkitTransitionEnd",
"mozTransitionEnd",
"oTransitionEnd",
"transitionend"
];
var transitionEnd = transitionEndEvents.join(" ");
$("要素").on(transitionEnd, function() {
// 処理
});