モバイルデバイス用のHTML5 Webアプリケーションを開発していて、滑らかなアニメーションで問題が発生しました。モバイルデバイスでCSSまたはJavaScriptの高さをスムーズにアニメーション化する方法
基本的に、ユーザーがボタンをタップすると、ドロワー(高さが0pxのdiv)が所定の高さ(ピクセル単位)にアニメートされ、コンテンツがそのドロワーに追加されます。 Pinterestアカウントをお持ちの場合は、今のようにアニメーションをhttp://m.pinterest.comに表示できます(コメントボタンまたはRepinボタンをタップしてください)。
残念なことに、モバイルデバイスでは、Webkitトランジションがハードウェアアクセラレーションによる高さプロパティではないため、非常に遅く、アニメーションがギザギザです。ここで
は、いくつかのコードスニペットです:
HTML: ...
<div class="pin"> <a class="comment_btn mbtn" href="#" title="" ontouchstart="">Comment</a> <div class="comment_wrapper"> <div class="divider bottom_shadow"></div> <div class="comment"> <!-- Content appended here --> </div> <div class="divider top_shadow" style="margin-top: 0"></div> </div> </div> <div class="pin"> ... </div>
CSS:
.comment_wrapper { -webkit-transition: all 0.4s ease-in-out, height 0.4s ease-in-out; position: relative; overflow: hidden; width: 100%; float: left; height: 0; } .comment { background: #f4eeee; margin-left: -10px; padding: 10px; height: 100%; width: 100%; float: left; }
Javascriptが(jQueryのを使用して):
function showSheet(button, wrapper, height) { // Animate the wrapper in. var css = wrapper.css({ 'height': height + 'px', 'overflow': 'visible', 'margin-bottom': '20px', 'margin-top': '10px' }); button.addClass('pressed'); } $('.comment_btn').click(function() { showSheet($(this), $(this).siblings('.comment_wrapper'), 150); });
スクリーンショット:http://imgur.com/nGcnS,btP3W
私はWebkitので直面した問題は、私はかなり理解できないことを変換であります:
- Webkit Transformsはコンテナの子をスケールしますが、これは私がしようとしているものにとって望ましくありません。子に適用された
-webkit-transform: none
はこの動作をリセットしないようです。 - Webkitトランスフォームは兄弟要素を移動しません。したがって、操作中のコンテナの後の
.pin
コンテナは自動的に下に移動しません。手動で修正することもできますが、面倒です。
ありがとうございます!
どうもありがとう!これを知ることはかなり役に立ちます。私はこの相互作用について再考するつもりだと確信していますが、参照のために画面の下からトランスフォームをポップアップさせることによって何を意味していますか? –
答えを例のコードで編集しました。例は、画面の下からスライドする仮想キーボードです。 – Duopixel
'translate3d(0、100%、0)'を使用すると、ハードウェアアクセラレーションが起動するため、さらに高速になります:) – Timo