質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

8236閲覧

CSSアニメーションが終わったときにクラスを削除する方法

saayan

総合スコア12

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2019/07/29 09:34

編集2019/07/29 10:35

###実現したいこと
CSSアニメーションが終わったのを見計らって、アニメーションのためのクラスを削除したいです。

###発生している問題

問題の概要としては、アニメーションする要素が一度隠れた後に現れると、アニメーションが再び実行されてしまう点です。

問題の再現過程は➀➁➂です。

➀まず「.flash」をクリックして「.box」をチカチカさせます。
➁次に「.unity」をクリックして「.box」を隠してください。
➂最後に「.split」をクリックしたときに、再び「.box」がチカチカしてしまうと思います。

この2回目のチカチカが不要です。

そこで、➀のチカチカが終わったタイミングで「.flash」を削除したいのですが、どうしたらできますでしょうか?

###該当のソースコード
実際のサンプル

html

1<div class="wrapper"> 2 3 <div class="inner left"> 4 <div class="box animated">box</div> 5 <button type="button" id="flash">flash</button> 6 </div> 7 8 <div class="inner right"> 9 <button type="button" id="unity">unity</button> 10 <button type="button" id="split">split</button> 11 </div> 12 13</div> 14 15

css

1/* 基本のデザイン */ 2.wrapper { 3 display: flex; 4} 5.wrapper.unity .left { 6 display: none; 7} 8.wrapper.unity .right { 9 width: 440px; 10} 11.inner { 12 width: 200px; 13 height: 200px; 14 background: tan; 15 margin: 10px; 16 padding: 10px; 17} 18.box { 19 background: gold; 20} 21 22/* アニメーション */ 23.box.animated.flash { 24 -webkit-animation-duration: 1s; 25 animation-duration: 1s; 26 -webkit-animation-name: box_flash; 27 animation-name: box_flash; 28} 29@-webkit-keyframes box_flash { 30 from, 31 50%, 32 to { 33 opacity: 1; 34 } 35 36 25%, 37 75% { 38 opacity: 0; 39 } 40} 41@keyframes box_flash { 42 from, 43 50%, 44 to { 45 opacity: 1; 46 } 47 48 25%, 49 75% { 50 opacity: 0; 51 } 52}

jQuery

1// フラッシュさせる 2$('#flash').click(function(){ 3 $('.box').addClass('flash') 4}); 5 6// 統一する 7$('#unity').click(function(){ 8 $('.wrapper').addClass('unity'); 9}); 10 11// 分割する 12$('#split').click(function(){ 13 $('.wrapper').removeClass('unity'); 14});

###補足
「.flash」を削除したいのは、➀のチカチカが終わったタイミングです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

https://developer.mozilla.org/ja/docs/Web/CSS/animation-iteration-count

javascript

1$('#split').click(function(){ 2 $('.wrapper').removeClass('unity'); 3});

javascript

1$('#split').click(function(){ 2 $('.wrapper').removeClass('unity'); 3 $('.box').removeClass('flash'); 4});

投稿2019/07/29 09:53

編集2019/07/29 10:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saayan

2019/07/29 10:00

まじめに解決策を探しているので、問題と関係のないリンクは貼らないようにお願い致します。m(-_-)m
退会済みユーザー

退会済みユーザー

2019/07/29 10:05

解決につながるヒントとは認識できませんか?
saayan

2019/07/29 10:11

タイトルが悪かったのだと思いますが、問題を誤解なさっていると思います。ご返信は結構です。ありがとうございました。
guest

0

タイトルも回答も悪くないですが
saayanさんの頭は悪いようですので代わりに回答します。

html

1<style> 2/* 基本のデザイン */ 3.wrapper { 4 display: flex; 5} 6.wrapper.unity .left { 7 display: none; 8} 9.wrapper.unity .right { 10 width: 440px; 11} 12.inner { 13 width: 200px; 14 height: 200px; 15 background: tan; 16 margin: 10px; 17 padding: 10px; 18} 19.box { 20 background: gold; 21} 22.box.animated.flash { 23 animation-duration: 1s; 24 animation-name: box_flash; 25} 26@keyframes box_flash { 27 from, 50%, to { 28 opacity: 1; 29 } 30 25%, 75% { 31 opacity: 0; 32 } 33} 34</style> 35<div class="wrapper"> 36 <div class="inner left"> 37 <div class="box animated">box</div> 38 <button type="button" id="flash">flash</button> 39 </div> 40 <div class="inner right"> 41 <button type="button" id="unity">unity</button> 42 <button type="button" id="split">split</button> 43 </div> 44</div> 45<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 46<script> 47// フラッシュさせる 48$('#flash').click(function(){ 49 $('.box').addClass('flash') 50}); 51 52// 統一する 53$('#unity').click(function(){ 54 $('.wrapper').addClass('unity'); 55}); 56 57// 分割する 58$('#split').click(function(){ 59 $('.wrapper').removeClass('unity'); 60 $('.box').removeClass('flash'); 61}); 62</script>

投稿2019/07/29 12:12

yasutomi

総合スコア2937

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saayan

2019/07/29 14:49

「.flash」を削除したいのは、➀のチカチカが終わったタイミングです。
yasutomi

2019/07/29 15:07

それはわかるのですがanimation-iteration-countの既定値が1なので ➂最後に「.split」をクリックしたときに、再び「.box」が チカチカしてしまうのを防止する目的なら上記のコードで問題ないです。 逆に上記のコードではダメな理由を説明していただきたいです。※ ※私はanimationendを理解していますが 「2回目のチカチカが不要」というのが質問の主旨なので ➀のチカチカが終わったタイミングで「.flash」を削除する 必要はないと判断した上で回答しています。
saayan

2019/07/29 15:22

質問の趣旨について一般化を介したカテゴリ錯誤によって曲解なさっています。実現したいこと、発生している問題、補足、の3か所に削除したいタイミングを前提しており、この具体性が質問の趣旨です。それを必然性のない一般化でもってご自分の判断を下されてしまっては困ります。 尚、ダメな理由ですが、この前提に沿ってお答えいただく限りにおいて不要な情報であるため割愛しています。ご回答ありがとうございました。
yasutomi

2019/07/29 15:49

必然性はあるのですがsaayanさんには 理解することができなかったようで残念です。 > 必然性のない一般化でもってご自分の判断を下されてしまっては困ります。
saayan

2019/07/29 17:02 編集

申し訳ございませんでした。
guest

0

ベストアンサー

MDN にあるように、中断された場合はイベントが発生しないので次の表示時にも動くことになります。
これが期待しない挙動であれば Kosuke_Shibuya さんの回答を参考にしてください。

jQuery

1$(document).on('animationend', function(event) { 2 $(event.target).removeClass('flash'); 3});

https://developer.mozilla.org/ja/docs/Web/API/Document/animationend_event

投稿2019/07/30 02:24

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saayan

2019/07/30 07:26

ご回答ありがとうございます。探していた方法でした。
guest

0

HTMLElement: transitionend イベントで1回めのCSSAnimation終了を検知して不要なClassをRemoveすれば解決しませんか?

あと、よろしければyasutomiさんやKosuke_Shibuyaさんが書かれているように3でRemoveするのがNGなケースが知りたいです。

  • サンプル以上に多数のボタンでClassを付与するから直ぐに消したいとか?

投稿2019/07/29 15:52

編集2019/07/29 15:56
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saayan

2019/07/29 16:52

ご回答ありがとうございます。参考にさせていただきます。NGなケースは➂のようにチカチカを再発させるアクションが多数あるため、それらのアクションすべてにremoveClassを書くことに違和感を覚えたためです。
oikashinoa

2019/07/30 02:43

x_xさんが書かれているように、animationendが正しいと思います。
saayan

2019/07/30 07:25

そのようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問