最後のフレームでCSS3アニメーションを停止する


180

クリックで再生する4部のCSS3アニメーションがありますが、アニメーションの最後の部分は画面からそれを取り除くことを目的としています。

ただし、再生すると、常に元の状態に戻ります。誰でも、最後のcssフレーム(100%)それを停止する方法、または再生後にdiv全体を削除する方法を知っています。

@keyframes colorchange {
  0%   { transform: scale(1.0) rotate(0deg); }
  50%  { transform: rotate(340deg) translate(-300px,0px) }
  100% { transform: scale(0.5) rotate(5deg) translate(1140px,-137px); }
}

ニックさん、使用しているcssとhtmlを投稿できますか?
セバスチャンパタンマスエリ

こんにちはセバスチャン、cssとjavascriptで質問を更新しました。私が使用している唯一のhtmlは、回転機能を開始するonclickを備えたdivです。
user531192 2010

回答:


375

あなたが探しています:

animation-fill-mode: forwards;

MDNの詳細canIuseのブラウザサポートリスト。


8
それがクロムで動作するかどうか知っていますか?
それで

4
これを正解として受け入れてください。この1の詳細な説明:4waisenkinder.de/blog/2014/10/13/...
Miron氏

@ user531192 Chrome / Webkitブラウザでは使用する必要があります -webkit-animation-fill-mode: forwards;
eivindml

Chromeで-webkit-接頭辞が不要になりました(少なくともv49以降)
カプセル

1
これで私が抱えていた1つの問題は、100% {}またはto {}セットがなかったためanimation-fill-mode: forwards;、アニメーションを使用してもでダンプされ0%ます。(私はいくつかの@forループを使用してアニメーションを作成していて、手動でとを追加するのfrom{}を忘れていましたto{});
Phil Tune

25

この動作を簡略animationプロパティ定義に追加する場合、サブプロパティの順序は次のとおりです。

animation-name- デフォルト none

animation-duration- デフォルト 0s

animation-timing-function- デフォルト ease

animation-delay- デフォルト 0s

animation-iteration-count- デフォルト 1

animation-direction- デフォルト normal

animation-fill-mode- これを次のように設定する必要があります forwards

animation-play-state- デフォルト running

したがって、最も一般的なケースでは、結果は次のようになります

animation: colorchange 1s ease 0s 1 normal forwards;

こちらのMDNドキュメントを参照してください


19
-webkit-animation-fill-mode: forwards; /* Safari 4.0 - 8.0 */
animation-fill-mode: forwards;

ブラウザのサポート

  • Chrome 43.0(4.0 -webkit-)
  • IE 10.0
  • Mozilla 16.0(5.0 -moz-)
  • Shafari 4.0 -webkit-
  • Opera 15.0 -webkit-(12.112.0 -o-)

使用法:-

.fadeIn {
  animation-name: fadeIn;
    -webkit-animation-name: fadeIn;

    animation-duration: 1.5s;
    -webkit-animation-duration: 1.5s;

    animation-timing-function: ease;
    -webkit-animation-timing-function: ease;

     animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
}


@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

5

最良の方法は、CSSの主要部分に最終的な状態を置くようです。こちらのように幅を入れ220pxてやっとなるようにしました220px。しかし、0px;

div.menu-item1 {
  font-size: 20px;
  border: 2px solid #fff;
  width: 220px;
  animation: slide 1s;
  -webkit-animation: slide 1s; /* Safari and Chrome */
}
@-webkit-keyframes slide { /* Safari and Chrome */
  from {width:0px;}
  to {width:220px;}
}  

これは素晴らしい、この問題に対処する最良の方法だと思います。
Drew Baker

3

オブジェクトのCSSをデフォルトの状態にリセットするようにwebkitAnimationNameを何も設定しないことが問題ではありません。状態をリセットしているsetTimeout関数を削除しただけでは、最終的に残ったままになりませんか?


1

私は同様の答えを投稿しました、そしておそらくあなたは見てみたいでしょう:

http://www.w3.org/TR/css3-animations/#animation-events-

開始や停止などのアニメーションの側面を確認し、「停止」イベントが発生したと言うと、domにやりたいことをすべて実行できます。私はしばらく前にこれを試してみましたが、うまくいくかもしれませんが、当分の間、あなたはwebkitに制限されることになると思います(しかし、おそらくすでにそれを受け入れています)。ところで、私は2つの回答について同じリンクを投稿したので、この一般的なアドバイスを提供します。W3Cをチェックしてください-彼らはほとんど規則を書いて標準を説明しています。また、webkit開発ページはかなり重要です。



-2

今日私は、フィルモードに使用したい制限があることを学びました。これはApple開発者によるものです。噂は*約* 6ですが、確かではありません。または、クラスの初期状態をアニメーションの終了方法に設定してから、* 0%から*初期化*することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.