Ecossistema Estendido
Animations Legadas

Animations reutilizáveis

IMPORTANTE: O pacote @angular/animations agora está depreciado. A equipe Angular recomenda usar CSS nativo com animate.enter e animate.leave para animations em todo código novo. Saiba mais no novo guia de animations de entrada e saída. Veja também Migrando do pacote de Animations do Angular para aprender como você pode começar a migrar para animations CSS puras em suas aplicações.

Este tópico fornece alguns exemplos de como criar animations reutilizáveis.

Criar animations reutilizáveis

Para criar uma animation reutilizável, use a função animation() para definir uma animation em um arquivo .ts separado e declare esta definição de animation como uma variável const exportada. Você pode então importar e reutilizar esta animation em qualquer um dos components da sua aplicação usando a função useAnimation().

animations.ts

import {animation, style, animate, trigger, transition, useAnimation} from '@angular/animations';export const transitionAnimation = animation([  style({    height: '{{ height }}',    opacity: '{{ opacity }}',    backgroundColor: '{{ backgroundColor }}',  }),  animate('{{ time }}'),]);export const sharedAnimation = animation([  style({    height: 0,    opacity: 1,    backgroundColor: 'red',  }),  animate('1s'),]);export const triggerAnimation = trigger('openClose', [  transition('open => closed', [    useAnimation(transitionAnimation, {      params: {        height: 0,        opacity: 1,        backgroundColor: 'red',        time: '1s',      },    }),  ]),]);

No trecho de código anterior, transitionAnimation é tornado reutilizável ao declará-lo como uma variável exportada.

ÚTIL: Os inputs height, opacity, backgroundColor e time são substituídos durante o runtime.

Você também pode exportar parte de uma animation. Por exemplo, o seguinte trecho exporta o trigger de animation.

animations.1.ts

import {animation, style, animate, trigger, transition, useAnimation} from '@angular/animations';export const transitionAnimation = animation([  style({    height: '{{ height }}',    opacity: '{{ opacity }}',    backgroundColor: '{{ backgroundColor }}',  }),  animate('{{ time }}'),]);export const sharedAnimation = animation([  style({    height: 0,    opacity: 1,    backgroundColor: 'red',  }),  animate('1s'),]);export const triggerAnimation = trigger('openClose', [  transition('open => closed', [    useAnimation(transitionAnimation, {      params: {        height: 0,        opacity: 1,        backgroundColor: 'red',        time: '1s',      },    }),  ]),]);

A partir deste ponto, você pode importar variáveis de animation reutilizáveis na classe do seu component. Por exemplo, o seguinte trecho de código importa a variável transitionAnimation e a usa através da função useAnimation().

open-close.component.ts

import {Component, input} from '@angular/core';import {transition, trigger, useAnimation, AnimationEvent} from '@angular/animations';import {transitionAnimation} from './animations';@Component({  selector: 'app-open-close-reusable',  animations: [    trigger('openClose', [      transition('open => closed', [        useAnimation(transitionAnimation, {          params: {            height: 0,            opacity: 1,            backgroundColor: 'red',            time: '1s',          },        }),      ]),    ]),  ],  templateUrl: 'open-close.component.html',  styleUrls: ['open-close.component.css'],})export class OpenCloseBooleanComponent {  isOpen = false;  toggle() {    this.isOpen = !this.isOpen;  }  logging = input(false);  onAnimationEvent(event: AnimationEvent) {    if (!this.logging) {      return;    }  }}

Mais sobre animations do Angular

Você também pode estar interessado em: