index example array angularjs angularjs-ng-repeat ng-animate

angularjs - example - Cómo retrasar ngAnimate en ngRepeat



ng-repeat index angularjs (2)

Ahora se admite de forma nativa con 1.2: https://docs.angularjs.org/api/ngAnimate#css-staggering-animations

Para usarlo, use el selector ng-enter-stagger en su CSS, así:

css:

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

sass (si está en uso):

=stagger($delay) &-stagger transition-delay: $delay animation-delay: $delay .animated &.ng-enter +stagger(0.3s)

Cuando se utiliza ngAnimate para fundirse en cada elemento en ngRepeat, actualmente todos los elementos se atenúan al mismo tiempo. ¿Es posible que cada elemento se desvanezca después de que el elemento anterior se haya desvanecido, por ejemplo, al 50%, lo que produce un efecto de cascada?

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

Usando ngAnimate sería bueno si fuera posible retrasar la animación de cada elemento, por ejemplo, de esta manera:

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

¿Hay una manera de resolver esto?

¡Gracias!

Añadido a GitHub https://github.com/angular/angular.js/issues/2460


Puede obtener este efecto configurando el estilo de retardo de transición en el elemento repetido. (Requiere v1.1.5)

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

Tendrá que establecer sus propiedades de transición por separado en su CSS, de lo contrario, el estilo en línea sobrescribirá toda la transición:

.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; }

Aquí está una bifurcación del ejemplo creado por heyotwell.