我在有角度的应用程序中有一个动画
@Component({
selector: 'app-portfolio',
templateUrl: 'portfolio.page.html',
styleUrls: ['portfolio.page.scss'],
animations: [
trigger('slideInOut', [
transition(':enter', [
style({transform: 'translateY(-100%)'}),
animate('200ms ease-in', style({transform: 'translateY(0%)'}))
]),
transition(':leave', [
animate('200ms ease-in', style({transform: 'translateY(-100%)'}))
])
])
]
})
但是,有两个元素在同一位置使用它,它们不能同时显示在屏幕上。因此,如果选择显示一个元素,则另一个元素将自动隐藏。问题是,如果其他元素没有被动画化,我只是希望该元素进行动画处理。是否有一种方法可以仅在满足条件的情况下显示动画?像这样吗?
<ion-item color="primary" (element2open === false)=[@slideInOut] *ngIf="openElement1" lines="none">
</ion-item>
<ion-item color="primary" (element1open === false)=[@slideInOut] *ngIf="openElement2" lines="none">
</ion-item>
答案 0 :(得分:4)
解决方案1:
您可以使用以下方式禁用动画:
@HostBinding('@.disabled')
public animationsDisabled = false;
这为您的组件设置了css类:ng-animate-disabled
查看示例here切换复选框“切换所有动画”
解决方案2: 为避免同时出现动画,可以使用sequence()以给定的顺序运行动画。
trigger('slideInOut', [
transition('* => *', [
sequence([
query(':enter', [
style({transform: 'translateY(-100%)'}),
animate('200ms ease-in', style({transform: 'translateY(0%)'}))
], {optional: true}),
query(':leave', [
animate('200ms ease-in', style({transform: 'translateY(-100%)'}))
], {optional: true})
])
])
])
这将运行第一个动画进入,第二个动画离开。如果要以其他方式舍入序列,请更改数组中的顺序。
确保使用@slideInOut
而不是item元素对父级进行注释。
<parent @slideInOut>
<ion-item color="primary" *ngIf="openElement1" lines="none">
</ion-item>
<ion-item color="primary" *ngIf="openElement2" lines="none">
</ion-item>
</parent>