【发布时间】:2014-06-03 02:10:56
【问题描述】:
我注意到,使用 ngAnimate 加载的 CSS 过渡在 Chrome 上被另一个过渡打断时会“生涩”。也就是说,它们似乎是向前跳转到目标状态,而不是从当前值开始。完全相同的过渡在没有加载 ngAnimate 的情况下会更加平滑,在 Firefox 上使用/不使用 ngAnimate 时更流畅。
例如,一个在点击时添加/删除类的简单元素:
<bigger-on-click-class class="{{showBigger ? 'bigger' : ''}}" ng-click="showBigger = !showBigger"></bigger-on-click-class>
由 CSS 过渡动画:
bigger-on-click-class {
display: block;
height: 200px;
width: 200px;
background: red;
-webkit-transition: height 5s;
transition: height 5s;
}
bigger-on-click-class.bigger {
height: 400px;
}
根据是否加载了ngAnimate,在快速连续多次点击时表现不同:
http://plnkr.co/edit/Fhwbd3WRiz5wHRIm10y3?p=preview 没有ngAnimate
http://plnkr.co/edit/WSED064MV2dtPnsEQuti?p=preview 与 ngAnimate
如果您尝试多次快速单击前面示例中的红色框,您应该会明白我的意思,或者单击下面查看截屏视频。
除了不加载ngAnimate,有没有办法避免这种情况,所以中断动画从当前显示的值/位置开始?
编辑:初始链接不正确。此外,在 Chrome 中观察到了生涩的行为,但在 Firefox 中没有。 编辑:重新构建问题以使其更清楚这是 Chrome/Firefox 的区别
【问题讨论】:
-
你用的是什么设备?
-
我在 Mac 上使用 Chrome。
-
我没看到。我正在使用 Chrome/Mac。
-
您是否尝试过在类属性中使用 ng-class="{'bigger': showBigger}" 而不是文本绑定?
-
我刚刚意识到:我不小心两次发布了同一个 Plunkr。其中一个不应该加载 ngAnimate,另一个应该。可以在一个小时左右编辑它(或者其他人,请随意......)
标签: angularjs css google-chrome css-transitions ng-animate