したがって、さまざまな効果(_border-radius
_、_box-shadow
_、およびtransform: scale()
)が適用されたネイティブ要素(div
s)がいくつかあります。それらをアニメートすると、2つの奇妙なことが起こります。
ここの例を参照してください: http://jsfiddle.net/trolleymusic/RHeCL/ -下部のボタンが問題を引き起こします。
最初の問題はFirefoxでも発生するので、それがアニメーション仕様の動作方法であるためだと思います。私が望んでいたものではありませんが、わかりました、私はそれと一緒に住んでいます。
2番目の問題は奇妙です。私はそれが3d変換と関係があることを知っています。なぜなら私が(テスト目的のためだけに)円上で_-webkit-perspective
_または_-webkit-transform-style: preserve-3d;
_を宣言するからです要素、それは同様にぼやけの問題を引き起こします。私の混乱は、zインデックスをすべて変換しようとしているのではなく、translateY
の代わりに純粋にtranslate
を使用してアニメーションを試したことです。
Chrome(18)、Chrome Canary(20)、Safari(5.1.2&5.1.4))で発生します。
それで、私は私が起こっていると思うことで正しいですか?そして、どうすればぼやけを避けることができますか?
最悪のシナリオ:要素をスケーリングする代わりに異なるサイズを使用できますが、これは実際には問題ではありませんが、これはより洗練された解決策になると思い、今ではこの問題が発生しています。
要素がぼやけている理由については、この回答を参照してください: https://stackoverflow.com/a/4847445/814647
上記の概要:WebKitは、アニメーション化する前に元のサイズ/ CSSを取得し、それを画像として処理します。次に、スケールアップしてぼやけを生成します。
解決策:初期サイズを最大のスケールにし、最初は低いスケールで開始します(したがって、あなたの場合は、サイズを5増やし、初期スケールを0.2に設定します)
[〜#〜]更新[〜#〜]
私が理解していることから現在のスケールを無視する理由は、あなたが特に翻訳だけを設定していないからです(私は今それのためにCSSを探しています)。 -webkit-animation
を実行すると、現在のすべての変換(スケール)がリセットされるため、スケールがそこにあることを確認する必要があります。私は変更するCSSを検索しているので、位置だけが変更されます。
私が見つけた最善の方法は、アニメーションが完了するのを待ってから、変換を要素に直接適用して、アニメーションクラスを削除することです。このようなものは私にとってはうまくいき、グリッチは発生しません:
$m.bindOnce($m('win-text'), 'webkitAnimationEnd', function(){ //avoid blurred problem with animating scale property in webkit
$m('win-text').style.webkitTransform = 'scale(1.5) translateY(-60px)';
$m.removeClass($m('win-text'), 'final');
});
私はjQueryとは異なるライブラリを使用していますが、あなたはその考えを理解しています。