私は、トライステートのチェックボックスとして機能する要素を持っています。状態が変わるたびに、その要素のアニメーションを実行したいと思います。基本的に、要素は、最初の状態を示すためにクラスが付けられていない状態から開始します。次に、ある状態のクラスを追加し、そのクラスを削除して、別の状態を第2の状態に追加します。JavaScriptなしでクラスを切り替えるときに同じアニメーションを実行する方法
最初のクリックでは機能しますが、その後のクリックではアニメーションが再生されません。
$('button').click(function() {
var $div = $('div');
if (!$div.hasClass('is-colored')) {
$div.addClass('green is-colored');
} else {
$div.toggleClass('green red');
}
});
@keyframes Animation {
from {
opacity: 0;
transform: scaleX(0) scaleY(0);
}
to {
opacity: 1;
transform: scaleX(1) scaleY(1);
}
}
.green {
background-color: #0F0;
-webkit-animation: Animation 0.25s linear forwards;
-moz-animation: Animation 0.25s linear forwards;
animation: Animation 0.25s linear forwards;
}
.red {
background-color: #F00;
/* I tried applying the animation on the second state but this isn't working */
-webkit-animation: Animation 0.25s linear forwards;
-moz-animation: Animation 0.25s linear forwards;
animation: Animation 0.25s linear forwards;
}
div {
width: 100px;
height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<button>Change Color</button>
I know it's possible to restart an animation with JavaScriptと3年前のようには、要するにto do this without JavaScript.
ことはできていないようでした、それは同じことを行うことが可能である:ここでは私がこれまで持っているものですCSSのみを使用してクラスを切り替える(つまり、タイムアウトは必要ありません)同じ要素を複数回アニメーション化しますか?
便利な答えてくれてありがとう、私はこのルートを取らなければならない場合があります唯一の方法は、それが常に異なるアニメーションを実行しますので、アニメーションの別のバージョンを作成することです。残念ながら、私は混乱し、すべての可能な限りタイムアウトを使用しないようにしたいと言及するのを忘れてしまった(ちょうど今質問を編集した)。それが不可能な場合は、私は変更を行います。 –
@MikeCタイムアウトを使用できない理由はわかりませんが、javascriptの変更を使わないように答えを編集しました。唯一の変更は別のアニメーションを追加することで、これは純粋なCSSの変更です。 – jerrylow
それは私ができないわけではありません、私はクラス変更を処理するフレームワークを持っているので、自分自身でタイムアウトを実行するのは不便です。これはまさに私が欲しいものです。ありがとう! –