Я хочу создать компонент, который, в зависимости от его свойства (который изменяется при нажатии кнопки), отображает один из двух элементов div (анимирует их, пока они «входят» и «уходят»).
Код и демо:
@Component({
selector: 'my-app',
template: `
<button (click)="show = !show">change</button><br><br>
<div @trigger *ngIf="show" style="width: 200px; height:200px; background: rgba(0,0,0,.3);"></div>
<div @trigger *ngIf="!show" style="width: 200px; height:200px; background: red">
</div>
`,
animations: [
trigger('trigger', [
transition(':enter', [
style({ width: '0' }),
animate('3s ease-in', style({ width: '*' })),
]),
transition(':leave', [
animate('3s ease-in', style({ width: '0' }))
])
]),
]
})
export class AppComponent {
show: false;
}
https://stackblitz.com/edit/angular-2p2czs
Выше я разместил пример кода, однако он работает странным образом. Если анимация достаточно длинная и я пару раз быстро нажимаю на кнопку, она создает более 2 делений, чего я не хочу достичь. Любые идеи, как это исправить? Когда свойство изменяется, пока div все еще анимированы, я ожидаю, что они откатят анимацию из текущего состояния (не знаю, возможно ли это, хотя).