IMPORTANT: @angular/animationsパッケージは現在非推奨です。Angularチームは、新しく書くコードのアニメーションにはanimate.enterとanimate.leaveを使ったネイティブCSSの利用を推奨します。詳しくは、新しいenterとleaveのアニメーションガイドを参照してください。また、アプリケーションで純粋なCSSアニメーションへの移行を始める方法については、AngularのAnimationsパッケージからの移行も参照してください。
このトピックでは、再利用可能なアニメーションを作成する方法の例をいくつか紹介します。
再利用可能なアニメーションを作成する
再利用可能なアニメーションを作成するには、animation()関数を使って別の.tsファイルにアニメーションを定義し、そのアニメーション定義をconstのエクスポート変数として宣言します。
その後、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 }}'),]);
前のコードスニペットでは、transitionAnimationをエクスポート変数として宣言することで再利用可能にしています。
HELPFUL: height、opacity、backgroundColor、timeの入力値は実行時に置き換えられます。
アニメーションの一部もエクスポートできます。
たとえば、次のスニペットではアニメーションのtriggerをエクスポートしています。
animations.1.ts
import {animation, style, animate, trigger, transition, useAnimation} from '@angular/animations';export const triggerAnimation = trigger('openClose', [ transition('open => closed', [ useAnimation(transitionAnimation, { params: { height: 0, opacity: 1, backgroundColor: 'red', time: '1s', }, }), ]),]);
ここから先は、再利用可能なアニメーション変数をコンポーネントクラスにインポートできます。
たとえば、次のコードスニペットではtransitionAnimation変数をインポートし、useAnimation()関数を通して使用しています。
open-close.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.html', styleUrls: ['open-close.css'],})
Angularアニメーションについてさらに詳しく
以下の項目にも興味があるかもしれません: