3

我正在尝试为 ipad 构建一个滑动菜单,其中滑动将导致来自下一个菜单点的内容将当前内容推出。

但是,几乎没有内容(或只有 div 中的图像),它非常流畅。但是,一旦我引入了一个更复杂的 DOM,它在启用触摸的 chrome 中就会变得迟缓,并且在 ipad3 和 ipad2 上无法使用。

我使用了 transform: translate3d 来启用硬件加速,但它似乎并没有削减它。有没有其他方法可以提高性能。我看过一些网站,它们以非常流畅的滑动动画呈现大量内容(例如,移动剧本),但我无法获得同样的感觉。

我使用jquery.event.swipe插件来引入这种格式的代码:

 $(document).ready(function(){
    var $swipeArea = $("#swipeBox"),
        $pages = $swipeArea.find(".page"),
        $currentPage = $(".currentPage"),
        index = $pages.index($currentPage),
        width = $swipeArea.width();

    $swipeArea
    .on('swipeleft', function(e){
        if(index == $pages.length - 1 ) { return; }
        $pages.eq(index+1).trigger('switchPage');
    })
    .on('swiperight', function(e){
        if(index == 0) { return; }
        $pages.eq(index-1).trigger('switchPage');
    })
    .on('switchPage', function(e){
        $pages.eq(index).removeClass("currentPage");
        $(e.target).addClass("currentPage");
        index = $pages.index($(e.target))
    });

使用这个 CSS:

.swipeContentArea .page{
   -webkit-transform: translate3d(0,0,0);
   -moz-transform: translate3d(0,0,0);
   -ms-transform: translate3d(0,0,0);
   -o-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);
   position:absolute;
   left:-100%;
   height:100%;
   z-index:1;
   overflow-x:hidden;
} 
.swipeContentArea .page.currentPage{
   left:0;
   z-index:2;
}
.swipeContentArea .page.currentPage ~ .page {
   left:100%;
}

  transition-property: left,height;
  transition-duration: 600ms;

在 swipeArea 上进行 css 转换。

4

1 回答 1

2

我可能错了,但是设置 a left(并为其设置动画)与translate3d:left不是硬件加速的完全不同,而translate3d is . 这可能是它运行不顺畅的原因。

translate3d需要x,yz形式的参数。如果您愿意,x可以作为水平轴、y垂直轴和“深度”轴。z不久前我遇到了类似的情况并创建了一个简单的 jquery 函数,该函数将计算我的滑动元素的宽度(在你的情况下;下一页),并设置translate3d一个负数(元素向左移动)或正数的样式(元素向右移动)x该元素上的值。

假设你的滑动元素是 1200px 宽,你可以通过设置它的样式来设置它的动画:

  1. 该元素是下一页:translate3d(1200px,0px,0px)
  2. 该元素是当前页面:translate3d(0px,0px,0px)
  3. 该元素是上一页:translate3d(-1200px,0px,0px)

(如果元素有边距,不要忘记合并边距。只需将它们添加到x值中)

这里有更多关于 CSS (3d) 变换的内容

于 2012-10-10T13:53:17.617 回答