我正在为移动设备开发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