Angular ngAnimate导致宽度动画跳跃

时间:2013-12-28 03:48:06

标签: css angularjs twitter-bootstrap ng-animate

我在几个案例中使用Angular和ngAnimate。在另一个,我有一个指令,正在改变列的宽度(使用Bootstrap col-md-*类)和一个看起来像这样的简单转换:

.column-view .column {
  transition: width 1s;
}

我在这里没有明确地使用ngAnimate,但它确实让我感到悲伤只是为了被包括在内。基本上,转换在转换到新宽度之前会跳转到零。如果我从模块中删除ngAnimate,则转换顺利,但我的应用中的其他功能需要ngAnimate

我可以禁用ngAnimate正在进行的纯CSS转换吗?我可以在这做什么来解决这个问题?让我发疯了。

Here is a fiddle证明了这个问题。有关复制的说明,请参阅注释。

1 个答案:

答案 0 :(得分:9)

注意:我使用当前的最新版本(AngularJS 1.2.6)来调查您的问题。

我发现内部调用了一个“blockTransitions”函数,它就是这样做的:它会阻止转换。

https://github.com/angular/angular.js/blob/master/src/ngAnimate/animate.js#L1099

如果您注释上面链接的行(“blockTransitions”函数体的单行),问题就解决了。

由于我不知道这是否是一个合适的解决方案(可能不是),我刚刚创建了一个PR,以便他们能够正确解决问题:

https://github.com/angular/angular.js/pull/5552


同样使用最新版本,有一种解决方法:http://jsfiddle.net/2fnhr/3/

app.config(function($animateProvider){
  $animateProvider.classNameFilter(/^((?!col-md).)*$/);
});

这只会对名称中不包含“col-md”的类应用ngAnimate内容,从而关闭相关Bootstrap类的ngAnimate。

此处正则表达式的说明:https://stackoverflow.com/a/406408/370290