我正在爲移動設備開發HTML5 Web應用程序,並遇到了一些平滑動畫的麻煩。基本上,當用戶點擊一個按鈕時,抽屜(高度爲0px的div)應該給定高度的動畫(以像素爲單位),並且內容將被附加到該抽屜中。如果你有一個Pinterest帳戶,你可以看到現在的動畫,在http://m.pinterest.com(點擊Comment或Repin按鈕)。如何在移動設備上平滑地在CSS或Javascript中創建高度
不幸的問題是,在移動設備上,Webkit Transitions沒有硬件加速的高度屬性,所以它非常滯後,動畫也參差不齊。
下面是一些代碼片段:
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); });
這裏是我的Webkit遇到的問題就是把這個我不能完全弄清楚:
- Webkit Transforms會縮放容器的子項,這對於我正在嘗試做的事來說是不合需要的。應用於兒童的
-webkit-transform: none
似乎沒有重置此行爲。 - Webkit變換不會移動同級元素。因此,在我們操作的容器後面的
.pin
容器不會自動下移。這可以手動修復,但很麻煩。
非常感謝!
非常感謝!知道這很有幫助。我很確定我會重新考慮這種互動,但是爲了參考你的意思,讓它從屏幕下面跳出來進行轉換? –
用示例代碼編輯答案,一個示例是從屏幕底部滑動的虛擬鍵盤。 – Duopixel
如果您使用'translate3d(0,100%,0)',速度會更快,因爲硬件加速會踢進:) – Timo