如何在ngRepeat中延迟ngAnimate

doo*_*man 22 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>
Run Code Online (Sandbox Code Playgroud)

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

<li ng-repeat="phone in phones" ng-animate="{enter: 'phone-enter', delay: 500}">
Run Code Online (Sandbox Code Playgroud)

有办法解决这个问题吗?

谢谢!

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

mat*_*sko 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;
}
Run Code Online (Sandbox Code Playgroud)

sass(如果在使用中):

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

.animated
  &.ng-enter
    +stagger(0.3s)
Run Code Online (Sandbox Code Playgroud)

  • 在离子的Angular 1.5中不起作用:( (2认同)

小智 14

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

<li ng-repeat="phone in phones" ng-animate="{enter: 'phone-enter'}" style="transition-delay: {{$index * 500}}ms">
Run Code Online (Sandbox Code Playgroud)

您必须在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;
}
Run Code Online (Sandbox Code Playgroud)

这是heyotwell创建的示例的分支.