如果满足条件,则进行角动画

时间:2020-03-06 16:53:01

标签: javascript css angular ionic-framework animation

我在有角度的应用程序中有一个动画

@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 个答案:

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