2011-08-09 12 views
33

keyframesを使用すると、DOMに挿入するとすぐに要素をアニメートすることができます。CSS3 - DOM削除に関する遷移

@-moz-keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

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

@keyframes fadeIn { 
    from {opacity:0;} 
    to {opacity:1;} 
} 

#box { 
    -webkit-animation: fadeIn 500ms; 
    -moz-animation: fadeIn 500ms; 
    animation: fadeIn 500ms; 
} 

いくつかの似たような機能は、それがDOMから削除される直前の要素に(CSS、JavaScriptをなし経由)アニメーションを適用するために利用可能である:ここではいくつかのサンプルCSSですか!以下は、私がこのアイディアを持って遊ぶために作ったjsFiddleです。あなたが解決策を知っていれば自由にフォークすることができます。

jsFiddle - http://jsfiddle.net/skoshy/dLdFZ/

答えて

12

fadeOutと呼ばれる別のCSSアニメーションを作成し、言います。そして、あなたが要素を削除したいとき、その新しいアニメーションの要素にanimationプロパティを変更し、アニメーションが完了すると、要素の実際の除去をトリガするanimationendイベントを使用します。

$('.hide').click(function() { 
    if (!$(this).hasClass('disabled')) { 
     $('#fill').css('-webkit-animation', 'fadeOut 500ms'); 
     $('#fill').bind('webkitAnimationEnd',function(){ 
      $('#fill').remove(); 
      $('.show, .hide').toggleClass('disabled'); 
     }); 
    } 
}); 

See also my updated version of your jsFiddle.が機能することSafariで私のために、少なくとも。

まあ、その代わりに、.css()のクラスを使用する必要があります。

jQueryはまだCSSアニメーションを "本当に"サポートしているとは思わないので、あなたはそれを取り除くことができるとは思わない。webkitAnimationEnd Firefoxでは、それはちょうどanimationendと呼ばれています。

私は確かにCSSでこれを行う方法はありません。

+0

これはかなり賢いですが、私は、私は# ' '$(だけ呼び出すことができますJavaScriptのルートをつもりだ場合塗りつぶし ')。fadeOut() '。私が本当に探しているのは、CSSのみのソリューションです。私は多くのフォーラムを見るまで、要素のフェードが可能であることを知らなかったので、要素をフェードアウトする方法を誰かが知っていることを願っています。 – Steve

+6

しかし '.fadeOut()'はJavaScriptを使ってアニメーションを行います。これは実際にアニメーションにCSSを使用します。 JavaScriptを使用して適切なタイミングでトリガーします。とにかく、実際に要素を挿入/削除するためにJavaScriptを使用しているので、「CSSのみ」は任意です。 CSSが削除される直前に何かをトリガーする方法はありません。これらの "click me" divをリンクにすると、セレクタとして '.hide:active +#fill'を使ってフェードアウトをトリガーすることができるかもしれませんが、実際には' animationend'イベントが必要ですフェードアウトしたときに要素を削除します。 – mercator

+0

@ S.K .:要約すると、 CSSは、要素の追加や削除などのDOM操作とは関係ありません。 FadeInのトリックは、要素が最初に表示されるたびにアニメーションが発生するため、機能します。なぜなら、それが起こる最初の瞬間だからです。要素がFadeOutに認識されるためには、削除しようとしていることを知る必要があります。これはJavascriptでのみ可能です。そして、あなたが既に要素を削除するためにJavascriptを使用しているので、 "CSSのみ"の要件は任意です。 – joequincy

6

私はjavascriptのコンポーネントライブラリで作業していましたが、私はこの問題を自分で実行しました。私はこの問題で多量のjavascriptを投げることができるという利点がありますが、既に少し使い慣れているので、優雅な解消のために次の点を考慮してください。

コンポーネント/ 「削除」と呼ばれるクラスです。

次にCSSにあなたがそのクラスを使用してアニメーションを定義することができます。JavaScriptで

.someElement.removing { 
    -webkit-animation: fadeOut 500ms; 
    -moz-animation: fadeOut 500ms; 
    animation: fadeOut 500ms; 
} 

、バック、あなたは「削除」クラスを追加した直後に、あなたは「アニメーションをチェックすることができるはず'cssプロパティがあり、存在する場合は、' animationEnd 'にフックできることがわかります。そうでない場合は、すぐに要素を削除してください。私はこれをしばらく前にテストすることを覚えています。私はサンプルコードを掘り下げて見ることができます。

アップデート:私はこのテクニックを掘って、あなたが削除されているDOM要素のためのCSS3アニメーションを使用することができますjQueryのための本当にクールなプラグインを書き始めました 。追加のJavascriptは必要ありません:http://www.github.com/arthur5005/jquery.motionnotion

これは非常に実験的なものですが、自己責任で使用してください。ヘルプとフィードバックが大好きです。 :)あなたは、CSSトランジションないCSSアニメーションを使用する必要がありフェードインとフェードアウトのようなもののための理想的

+0

非常に興味深い。 'append()'や 'prepend()'のような他の関数のサポートを追加すると、それを使い始めるでしょう。それはhttps://github.com/ai/transition-eventsとどのように比較されますか? –

+1

こんにちはスティーブ、これは主に他の人のために、私はappend()とprepend()をサポートするようにプラグインを更新しました。 :) –

-4

..

+4

アニメーションはDOM挿入で動作しますが、遷移はありません –

関連する問題