Угловые анимации - передать параметр для запуска из шаблона

У меня есть простой триггер анимации, который затухает элемент в и из.

trigger('fadeInOut', [
  transition(':enter', [
    style({ opacity: 0 }),
    animate('0.1s ease-in-out')
  ]),
  transition(':leave', [animate('0.1s ease-in-out', style({ opacity: 0 }))])
])

Есть ли способ, которым я могу "настроить" эту анимацию из шаблона на лету, как

<div [@fadeInOut]="2"></div>
<div [@fadeInOut]="'0.5s'"></div>

Я хотел бы добиться того, чтобы передать набор координат, например, offsetX и Y из события щелчка мыши, и анимировать элемент (которого еще нет в dom) в эту позицию.

1 ответ

К сожалению, после рендеринга компонента невозможно отправить параметры в угловую анимацию.

но вы можете создать триггерную функцию с входным значением и отправить в нее некоторый параметр.

const fadeInOut = 
(name, duration) => trigger(name, [
  transition(':enter', [
    style({ opacity: 0 }),
    animate(`${duration}s ease-in-out`)
  ]),
  transition(':leave', [animate(`${duration}s ease-in-out`, style({ opacity: 0 }))])
])

Составная часть:

@Component({
   ...
  animations: [
    fadeInOut('fadeInOut-1', 0.5),
    fadeInOut('fadeInOut-2', 1)
  ]
})

HTML

<div [@fadeInOut-1]></div>
<div [@fadeInOut-2]></div>

посмотрите на этот пример, который я создал: https://stackblitz.com/edit/angular-animation-trigger-function

Вот рабочее решение для предоставления параметра анимации из шаблона компонента.

Определите параметры в шаблоне следующим образом:

<div *ngIf="isVisible" [@fadeInOut]="{value: true, params: {myTime: '.4s'}}"></div>
<div *ngIf="isVisible" [@fadeInOut]="{value: true, params: {myTime: '.8s'}}"></div>
<div *ngIf="isVisible" [@fadeInOut]="{value: true, params: {myTime: '1.2s'}}"></div>

А затем используйте его в определении анимации:

animations: [
  trigger('fadeInOut', [
    transition(':enter', [style({ opacity: 0 }), animate('{{ myTime }} ease-in-out')]),
    transition(':leave', [animate('{{ myTime }} ease-in-out', style({ opacity: 0 }))])
  ])
],

Демо там: stackblitz

Другие вопросы по тегам