我在 Angular 应用程序中有一个动画
@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>
最佳答案
解决方案 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>
关于javascript - 如果满足条件则有 Angular 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60568437/