2016-05-25 13 views
0

JavaScriptを使用してCSSトランジションを再生する必要があります。私は、同じ実行フレームで実行され、最適化によって、それは何も変更はありません、私はコードの両方を考えて、私のdivのCSSスタイルをリセットし、何も起こりません新しいトランジションを適用...トランジションCSSを再起動/リセットして再生しますか?

...

例:https://jsfiddle.net/f0s8a8jp/2/

test.css({transition: 'none', height: '0px'}); 
test.css({transition: 'height 1s linear', height: '100px'}); 

私は一瞬のために見つけた唯一の解決策(私にとっては本当にきれいではないが)、プロパティがリセットされ、新しいトランジションの適用beetweenのsetTimeoutを使用することです:https://jsfiddle.net/f0s8a8jp/3/

より良いアイデアは大歓迎です!

答えて

3

遷移は、要素の計算された次元に適用されます。 CSSプロパティを設定しても、それは計算されません。したがって、プロパティを設定して戻すことは、それを変更しないようにすることです。ブラウザが要素をリフローする必要があるときに計算されます。

setTimeoutは、最終的にブラウザにその間にリフローを計算させます。あなたはちらつきなしで同じを達成するために​​を使用することができます。

もう1つのハックは、CSSプロパティを変更した直後にブラウザをリフローさせることです(test[0].offsetWidth;など)。 遷移が、その後正常に実行されます。https://jsfiddle.net/f0s8a8jp/9/

リフローについてのより詳細な議論(と再描画)は、ここで見つけることができます:私の問題は、「最初のsetTimeout」ではありませんhttp://www.phpied.com/rendering-repaint-reflowrelayout-restyle/

0

これを試してみてください:

https://jsfiddle.net/f0s8a8jp/4/

私はそれがclickに取り組んで作られたので、あなたは結果を見て、それをクリックする必要があります。

私が実際に変更したのは、コードの順序だけでした。

+0

、それは、第2 ^^です私のユースケースでは、トランジションの再生はsetTimeoutではなく、anoterメソッドによってトリギーされます;) – Matrix

+0

それは、それがトリガーされたことによって私に伝える必要があります。 –

+0

これはあなたのクリックのようなユーザーの行動ですが、ここでは本当に重要ではありません^^問題は、同じプロパティをリセットして同じように変更することです。CSSを1フレームで使用します – Matrix

関連する問題