CSSで要素をアニメーションするときに、いったんアニメーションを途中で止めて最初からアニメーションをリスタート(再スタート)する方法を述べます。
例)ボタンを押したときに、アニメーションを記述したCSSのclassを追加して要素をアニメーションするとき
[HTML]
<div id="animation"></div> <button type="button" id="btn">ボタン</button>
[CSS]
#animation { width: 50px; height: 50px; background: #FFA500; } .run-animation { position: relative; -webkit-animation: slide-animation 1.5s ease; -ms-animation: slide-animation 1.5s ease; -o-animation: slide-animation 1.5s ease; -moz-animation: slide-animation 1.5s ease; } @-webkit-keyframes slide-animation { from {left: 0px;} to {left: 150px;} } @-ms-keyframes slide-animation { from {left: 0px;} to {left: 150px;} } @-o-keyframes slide-animation { from {left: 0px;} to {left: 150px;} } @-moz-keyframes slide-animation { from {left: 0px;} to {left: 150px;} }
[JavaScript]
$('#btn').on('click', function () { $('#animation').addClass('run-animation'); });
上記の場合、ボタンを2回以上押した2回目以降のアニメーションは、前のclassが残っているため、アニメーションができません。
そこで、アニメーションの終了を検知して、classを削除する方法が考えられますが、その方法の場合、現在のアニメーションが終了するまで、次のアニメーションを始めることができません。
そこで、下記のようにclassを追加する前にclassを削除する方法が考えられます。
$('#animation').removeClass('run-animation').addClass('run-animation');
しかし、これでもアニメーションができません。
そこで、次にいったん要素自体を削除して、改めて要素を追加する方法が考えられます。
これでアニメーションを再度初めからリスタートできます。下記サイトを参考にしてください。
ただこの方法は、プログラムが複雑な場合に組み込むのが厄介なときがあります。
そこで、下記のようにすると簡単にアニメーションのリスタートができます。
$('#btn').on('click', function () { $('#animation').removeClass('run-animation'); $('#animation')[0].offsetWidth = $('#animation')[0].offsetWidth; $('#animation').addClass('run-animation'); });
以上がCSSアニメーションのリスタート方法となります。
コメント
参考になりました。
有難う御座います。