添加带有 angular 动画的列表项
adding list item with angular animations
我正在尝试为使用 ngFor 制作的列表制作动画。当动态地将一个新项目添加到数组中时,我想要下面的动画。不知何故,我无法获得这种滚动效果。知道我做错了什么吗?
@Component({
selector: 'widget',
templateUrl: './widget.component.html',
styleUrls: ['./widget.component.scss'],
animations: [
trigger('slideInOut', [
transition(':enter', [
style({transform: 'translateY(-100%)'}),
animate('800ms ease-in-out', style({transform: 'translateY(0%)'}))
])
])
]
})
html
<div *ngFor="let winner of widgetService.winners; let i = index"
class="winners__item" [@slideInOut]>
<img [src]="winner.imageUrl" alt="{{ winner.gameName }}">
<div class="block__container--first">
<div class="block__container--first--gameName">{{winner.gameName}}</div>
<div class="block__container--first--firstName">{{winner.firstName}}</div>
</div>
<div class="block__container--second">
<div class="block__container--second--timestamp">{{winner.timestamp}}m ago</div>
<div class="block__container--second--winning">{{winner.amount}} €</div>
</div>
</div>
[![在此处输入图片描述][1]][1]
我有:
[![在此处输入图片描述][2]][2]
我尝试了什么:
animations: [
trigger('slideInOut', [
transition(':enter', [
style({marginTop: '-100px'}),
animate('800ms ease-in-out', style({transform: 'translateY(0%)'}))
])
])
]
元素往下跳,因为新元素排在第一位。 transform: translate()
不改变元素的放置行为,只是可见位置,不影响其他元素。
因此,要实际更改所有元素的 space,我们需要边距之类的东西。
animations: [
trigger('slideInOut', [
transition(':enter', [
style({marginTop: '-100%'}),
animate('800ms ease-in-out', style({marginTop: '0px'}))
])
])
]
有了这个,新项目被放置在列表上方,并在它移动时将所有后续元素向下推。
我正在尝试为使用 ngFor 制作的列表制作动画。当动态地将一个新项目添加到数组中时,我想要下面的动画。不知何故,我无法获得这种滚动效果。知道我做错了什么吗?
@Component({
selector: 'widget',
templateUrl: './widget.component.html',
styleUrls: ['./widget.component.scss'],
animations: [
trigger('slideInOut', [
transition(':enter', [
style({transform: 'translateY(-100%)'}),
animate('800ms ease-in-out', style({transform: 'translateY(0%)'}))
])
])
]
})
html
<div *ngFor="let winner of widgetService.winners; let i = index"
class="winners__item" [@slideInOut]>
<img [src]="winner.imageUrl" alt="{{ winner.gameName }}">
<div class="block__container--first">
<div class="block__container--first--gameName">{{winner.gameName}}</div>
<div class="block__container--first--firstName">{{winner.firstName}}</div>
</div>
<div class="block__container--second">
<div class="block__container--second--timestamp">{{winner.timestamp}}m ago</div>
<div class="block__container--second--winning">{{winner.amount}} €</div>
</div>
</div>
[![在此处输入图片描述][1]][1]
我有:
[![在此处输入图片描述][2]][2]
我尝试了什么:
animations: [
trigger('slideInOut', [
transition(':enter', [
style({marginTop: '-100px'}),
animate('800ms ease-in-out', style({transform: 'translateY(0%)'}))
])
])
]
元素往下跳,因为新元素排在第一位。 transform: translate()
不改变元素的放置行为,只是可见位置,不影响其他元素。
因此,要实际更改所有元素的 space,我们需要边距之类的东西。
animations: [
trigger('slideInOut', [
transition(':enter', [
style({marginTop: '-100%'}),
animate('800ms ease-in-out', style({marginTop: '0px'}))
])
])
]
有了这个,新项目被放置在列表上方,并在它移动时将所有后续元素向下推。