2016-04-04 14 views
2

Reproduction onlineキーフレームアニメーション火災(10、11、12、13)

Reproduction with vanilla Javascript

私はこれを使って、CSSアニメーションを作成しています:

持つ
.slides.future.active { 
    -webkit-animation-name: sectionIn; 
    animation-name: sectionIn; 
} 
@keyframes sectionIn { 
    .... 
}{ 

.animated { 
    transition: all 800ms ease; 
    -moz-transition: all 800ms ease; 

    -webkit-animation-duration: 800ms; 
    animation-duration: 800ms; 
    -webkit-animation-fill-mode: both; 
    animation-fill-mode: both; 

    -webkit-animation-timing-function: ease; 
    timing-function: ease; 
} 
.slides.future{ 
    -webkit-transform: translate3d(0, 100%, 0); 
    -ms-transform: translate3d(0, 100%, 0); 
    transform: translate3d(0, 100%, 0); 
} 

をHTMLの後に:

今、クラスを削除するときfutureを要素から削除すると、アニメーションは再び発生します。

これはIEでのみ発生します。 (10、11、12、13)のFirefox、Chromeでうまく機能し、サファリ...

Reproduction online

Reproduction with vanilla Javascript

+0

FWIW Internet Explorerは唯一@JamesDonnellyそれはあなたがエッジバージョンを考える方法によって異なりバージョン11 –

+0

に上がります。 [Browserstack](http://www.browserstack.com)は12と13と呼んでいます。 – Alvaro

+0

Edgeは別のブラウザです。これはIE11で初めて登場したEdgeHTMLと呼ばれ、その後はバージョン14で動作しますが、ブラウザとしてのMicrosoft Edgeは現在バージョン20のものです。 –

答えて

1

可能な解決策は、CSSセレクタを変更することです。

.animatedの代わりに.future.animatedを使用し、そのセレクタでアニメーションを適用します。

.future.animated { 
    transition: all 800ms ease; 
    -moz-transition: all 800ms ease; 

    -webkit-animation-duration: 800ms; 
    animation-duration: 800ms; 
    -webkit-animation-fill-mode: both; 
    animation-fill-mode: both; 

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

こうして、両方のクラスを持つ要素だけがアニメーション化されます。したがって、要素からクラスfutureを削除すると、再びアニメーション化できなくなります。

https://jsfiddle.net/jsms8p1k/17/

+0

期待どおりに動作します。どうもありがとう! – Alvaro

3

(IE用の非常に不思議ではない)不思議なあなたも.slides.activeがなく.futureされたときにどうするかをブラウザに指示する必要があります。あなたがその分け目のためにしなければ、それは再び元に戻すよう指示が出るまで元に戻ります。だから、追加する必要があります。

.slides.active:not(.future){ 
    -webkit-transform: translate3d(0, 0, 0); 
    -ms-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0); 
} 

はIE 11でのみテストされています。

Fiddle

+0

これは、アニメーションスタイルからトランスフォームプロパティを複製する必要があることを意味します。また、追加したいアニメーションを持つ多くのクラスに対してトランスフォームプロパティを実行する必要があります。 (slides.past、slides.future ...)これが私が他の答えを選んだ主な理由です。彼のアプローチでは、私は '.future.animated、.past.animated'を行うことができ、プロパティを複製する必要はありません。 – Alvaro

+0

魅力的な作品です、ありがとうございます。 – Thomas