为什么动画不适用于 Angular 中的 [hidden]?
Why animation does not work for [hidden] in Angular?
我有两个必须切换的块。
<div [hidden]="isVisible$ | async" [@inOutAnimation]>
<div [hidden]="!(isVisible$ | async)" [@inOutAnimation]>
组件内的动画:
animations: [
trigger("inOutAnimation", [
transition(":enter", [
style({ height: 0, opacity: 0 }),
animate("1s ease-out", style({ height: 300, opacity: 1 })),
]),
transition(":leave", [
style({ height: 300, opacity: 1 }),
animate("1s ease-in", style({ height: 0, opacity: 0 })),
]),
]),
],
当我更改 isVisible$
时,divs
也会更改。但是动画不起作用。我做错了什么?
hidden
属性不支持动画,因为它不会在两种状态之间进行任何转换。
我最近遇到了同样的问题并这样做了:
animations: [
trigger('contentExpansion', [
state('collapsed', style({height: '0', opacity: 0})),
state('expanded', style({height: '*', opacity: 1})),
transition('collapsed <=> expanded', [
animate('300ms cubic-bezier(0.35, 0, 0.25, 1)')
]),
]),
],
你可以注意到我使用了 Angular animation states.
在 HTML :
<div class="card-header" (click)="collapsed = !collapsed">
在组件中:
@Input() collapsed: boolean = true;
我有两个必须切换的块。
<div [hidden]="isVisible$ | async" [@inOutAnimation]>
<div [hidden]="!(isVisible$ | async)" [@inOutAnimation]>
组件内的动画:
animations: [
trigger("inOutAnimation", [
transition(":enter", [
style({ height: 0, opacity: 0 }),
animate("1s ease-out", style({ height: 300, opacity: 1 })),
]),
transition(":leave", [
style({ height: 300, opacity: 1 }),
animate("1s ease-in", style({ height: 0, opacity: 0 })),
]),
]),
],
当我更改 isVisible$
时,divs
也会更改。但是动画不起作用。我做错了什么?
hidden
属性不支持动画,因为它不会在两种状态之间进行任何转换。
我最近遇到了同样的问题并这样做了:
animations: [
trigger('contentExpansion', [
state('collapsed', style({height: '0', opacity: 0})),
state('expanded', style({height: '*', opacity: 1})),
transition('collapsed <=> expanded', [
animate('300ms cubic-bezier(0.35, 0, 0.25, 1)')
]),
]),
],
你可以注意到我使用了 Angular animation states.
在 HTML :
<div class="card-header" (click)="collapsed = !collapsed">
在组件中:
@Input() collapsed: boolean = true;