В angular вы можете поразить анимацию, как я делаю здесь, например:
<div
masonryLayout
[masonryOptions]="masonryOptions"
[input]="photos"
class="grid"
[@photosAnimation]="photos.length"
>
<img
*ngFor="let photo of photos; let i = index"
(click)="onPhotoClick(photo)"
src="{{photo.photo.medium}}"
class="grid-item clickable hover-outline"
[ngClass]="[photo.addedToCart ? 'in-cart-icon':'']"
alt="{{photo.motive}}"
/>
</div>
Я постоянно добавляю новые элементы в список по запросу, например, когда пользователь нажимает кнопку «показать больше фотографий». Но это перезапускает анимацию на всех фотографиях, как мне анимировать только подмножество списка?
РЕДАКТИРОВАТЬ: у меня есть два разных полурешения,
1) Первые фото загружаются моментально, последующие загружаются с задержкой:
animations: [
trigger('photosAnimation', [
transition('* => *', [
query(
':enter',
style({ opacity: 0, transform: 'translateY(-20%)' }),
{ optional: true }
),
query(
':enter',
stagger('100ms', [
animate('100ms', style({ opacity: 1, transform: 'translateY(0)' }))
]),
{ optional: true }
)
])
])
]
2) Другой вариант повторно анимирует все фотографии при добавлении новых в список:
animations: [
trigger('photosAnimation', [
transition('* => *', [
query(
'*',
style({ opacity: 0, transform: 'translateY(-20%)' }),
{ optional: true }
),
query(
'*',
stagger('100ms', [
animate('100ms', style({ opacity: 1, transform: 'translateY(0)' }))
]),
{ optional: true }
)
])
])
]
Ни одно из этих полурешений полностью не удовлетворяет моему желанию как шататься в первом списке, так и оживляться в дополнениях к списку.