如何在ng重复中延迟ngAnimate

时间:2013-04-08 15:08:48

标签: angularjs angularjs-ng-repeat ng-animate

使用ngAnimate淡入ngRepeat中的每个项目时,当前所有项目同时淡入。每个项目是否有可能在上一个项目淡出到例如淡入之后淡入50%导致级联效应?

<ul>
   <li ng-repeat="phone in phones" ng-animate="{enter: 'phone-fade-enter'}">
     <img src="{{phone.img}}"> {{phone.name}}
   </li>
</ul>

使用ngAnimate,如果可以延迟每个项目的动画,那将是很好的,例如像这样:

<li ng-repeat="phone in phones" ng-animate="{enter: 'phone-enter', delay: 500}">

有没有办法解决这个问题?

谢谢!

添加到GitHub https://github.com/angular/angular.js/issues/2460

2 个答案:

答案 0 :(得分:27)

现在支持1.2:https://docs.angularjs.org/api/ngAnimate#css-staggering-animations

要使用它,请使用CSS中的ng-enter-stagger选择器,如下所示:

<强>的CSS:

.animated.ng-enter-stagger {
  transition-delay: 0.3s;
  animation-delay: 0.3s;
}

sass(如果正在使用):

=stagger($delay)
  &-stagger
    transition-delay: $delay
    animation-delay: $delay

.animated
  &.ng-enter
    +stagger(0.3s)

答案 1 :(得分:14)

您可以通过在重复元素上设置转换延迟样式来获得此效果。 (需要v1.1.5)

<li ng-repeat="phone in phones" ng-animate="{enter: 'phone-enter'}" style="transition-delay: {{$index * 500}}ms">

您必须在CSS中单独设置过渡属性,否则内联样式将覆盖整个过渡:

.phone-enter {
  opacity:0;
  -webkit-transition-property: all;
  -webkit-transition-timing-function: ease-out-cubic;
  -webkit-transition-duration: 400ms;
}
.phone-enter.phone-enter-active {
  opacity: 1;
}

这是由heyotwell创建的fork of the example