22

当使用 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

4

2 回答 2

27

现在 1.2 原生支持此功能:https ://docs.angularjs.org/api/ngAnimate#css-staggering-animations

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

CSS:

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

萨斯(如果正在使用):

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

.animated
  &.ng-enter
    +stagger(0.3s)
于 2013-11-08T03:12:23.687 回答
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 创建的示例的一个分支。

于 2013-05-24T16:03:18.273 回答