代码之家  ›  专栏  ›  技术社区  ›  CLiown

将转换转换为转换以获得更好的性能

  •  0
  • CLiown  · 技术社区  · 12 年前

    我正在实现一种“抽屉”式效果,当单击按钮时,抽屉从屏幕底部打开。此处示例: http://jsfiddle.net/jYcSF/

    我使用CSS翻译来实现这一点:

    .drawer {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        overflow: hidden;
        background: #333;
        height: 5px;
        width: 100%;
        -webkit-transition: height .25s linear;
        -moz-transition: height .25s linear;
        transition: height .25s linear;
    }
    

    然后我使用jQuery在单击按钮时切换抽屉上的类:

      $('.drawer-open').click(function(e){
        $('.drawer').toggleClass('active');
      });
      $('.drawer-close').click(function(e){
        $('.drawer').toggleClass('active');
      });
    

    这样,.active抽屉CSS就可以生效,并设置抽屉的高度动画,使其从屏幕底部打开:

    .drawer.active {
        height: 80%;
    }
    

    是否可以使用CSS转换而不是转换来实现相同的效果?我正在努力确保抽屉的打开尽可能的顺畅和无噪音。

    1 回复  |  直到 12 年前
        1
  •  1
  •   SW4    12 年前

    简单答案。。

    了解这些CS财产背后的原因和差异非常重要:

    Transform

    CSS转换属性允许您修改 CSS可视化格式模型。使用它,可以翻译元素, 根据设置的值进行旋转、缩放和倾斜。

    Transition

    […]它允许定义元素的两个状态之间的转换。

    在本例中,转换不是一个合适的解决方案,因为您修改的是属性(高度),而不是三维空间中元素的坐标表示。如果你使用 transform 你能做的最接近 scaleY 给它一个粗略的值,您还需要将原点设置为 y 的值 100% -然而,你会注意到,虽然元素会增长,但它的内容会被拉伸,因为你已经在3d平面上对它进行了转换,而不是从属性的角度改变了它的底层定义。

    Example Fiddle