如果满足条件则有角度动画

Mic*_*son 2 javascript css animation ionic-framework 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%)'}))
      ])
    ])
  ]
})
Run Code Online (Sandbox Code Playgroud)

但是,同一位置有两个元素使用它,并且它们不能同时出现在屏幕上。因此,如果我选择显示一个元素,那么另一个元素将自动隐藏。问题是我只想在另一个元素没有动画时动画出来。有没有办法只在满足条件时显示动画?像这样的东西吗?

  <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>

Run Code Online (Sandbox Code Playgroud)

Ser*_*nho 5

解决方案一:

您可以使用以下方法禁用动画:

  @HostBinding('@.disabled')
  public animationsDisabled = false;
Run Code Online (Sandbox Code Playgroud)

这将为您的组件设置 css 类:ng-animate-disabled

请参阅此处切换复选框“切换所有动画”的示例

解决方案 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})
    ])
  ])
])
Run Code Online (Sandbox Code Playgroud)

这将运行第一个动画进入和第二个动画离开。如果您想要相反的顺序,请更改数组中的顺序。

确保使用 注释父元素@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>
Run Code Online (Sandbox Code Playgroud)