【问题标题】:animations of multiple widths simultaneously, amounting to 100%多宽度动画同时播放,达到100%
【发布时间】:2013-12-17 19:47:05
【问题描述】:

当用户关闭左侧面板时,我正在尝试调整两个元素的宽度以扩展到更宽的区域。 为此,我将左侧面板设置为向右:100%,并扩展第一个元素以占据更多区域,同时保持第二个元素具有固定宽度(这也是一个动画,因为现在整个 div 占用了更多空间,所以他的百分比需要改变才能占据相同的像素宽度)

代码比较长,这里就不多贴了

  $('#centerWeb').animate({
                "width": "81.33333333%"
        }, {
            duration: 1000,
            queue: false
        });

JSFiddle:http://jsfiddle.net/dpPG7/

我有几个问题,首先,动画不“流畅”,它很烦躁,我听说或有人说您可以使用相同的计时器队列来排队动画,但我找不到如何(因为我相信百分比的微小差异可能会导致这种情况)。 任何人都可以提供帮助的想法?

我的第二个问题是,有时,就像在 jsfiddle 示例中一样,其中一个中心元素会弹回一行。在我的完整网络中,当重新扩展左侧区域时会发生这种情况,但在 JSfiddle 示例中,当最小化左侧区域时会发生这种情况。

在 JSFiddle 中:单击时左侧区域将其移除并展开其余区域,单击时红色按钮将左侧区域向后扩展。

我的第三个也是最后一个问题,左侧区域的动画,当它向后扩展时,不会与第一个中心区域(actionList)的扩展同时发生,它一旦完成就会发生,尽管是队列:假。

【问题讨论】:

  • 我是手机,不会写代码。我建议在具有 '(-webkit-)transition: width 300ms linear; 的 CSS 中创建 s 类。 ' 并且你可以使用 jQuery 来设置宽度而无需 ttt 动画。我怀疑 jQuery 会做代码动画,设置不使用 GPU 而是 CPU 的值(100px -> 99px ->...-> 0px)。
  • 我试一试,可能有助于让它更流畅。
  • 我认为你的方法太复杂了。有一些很好的插件可以实现这一点。如果你想自己做,你应该使用 float 属性。我会尽力解释一下。
  • 我给了一切 float:left,我不确定你的意思。
  • 好吧,别管float。这是一种可能的方法,它很流畅,只需要一点代码jsfiddle.net/TCHdevlp/Ft2cY

标签: javascript jquery html css animation


【解决方案1】:

正如我所评论的,我个人更喜欢this codepen example

#rightContainer{
    -webkit-transition: all linear 300ms;
    .. /* browser compatibility & remaining styles */
}
#rightContainer.shrink {
  left:20%;
}

$("#btn").click(function(){
  $("#rightContainer").toggleClass("shrink");
});

这是 imo 干净且良好的做法。

【讨论】:

  • 我喜欢你的回答。但是您并不是唯一一个提供带有前缀的解决方案的人。这真的是一个好习惯吗?我更喜欢 Jquery 而不是 CSS。也许它在 CPU 使用方面效率较低,但它确实更容易维护。
  • cpu 不是关于效率,而是关于渲染质量。所以在IE9+上使用它,我认为这不会是一个问题。 (具有匹配的 css)
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2015-02-13
  • 1970-01-01
  • 2022-12-09
  • 2015-06-06
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多