javascript - 如果满足条件则有 Angular 动画

标签 javascript css angular ionic-framework animation

我在 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/

相关文章:

javascript - 为什么我们在 Javascript 中将秒乘以 1000 来添加时间

javascript - Meteor 方法 react 性不起作用

javascript - 如何迭代无限动画并在迭代之间有延迟

javascript - 如何在angular2中使用 ‘Rx Observable’来解决双击问题

typescript - 如何访问服务内的全局变量?

javascript - 带有静态 HTML 的 Node + Express。如何将所有请求路由到 index.html?

html - 为什么浏览器从右到左匹配 CSS 选择器?

javascript - 带有翻转图像的动画侧边菜单

javascript - 在背景 firefox 闪烁中加载高分辨率图像

javascript - 从多个数组填充 HTML 表