13

我一直在摆弄Angular 动画,想知道是否有最好/推荐的方法来避免内联样式......例如,

@Component({
selector: 'page-that-needs-anime',
templateUrl: './anime.component.html',
styleUrls: ['./anime.component.scss'],
animations: [
trigger('animeTrigger', [
state('in', style({transform: 'translateY(0)'})),
transition('void => *', [
  animate(700, keyframes([
    style({opacity: 0, transform: 'translateY(-100%)', offset: 0}),
    style({opacity: 1, transform: 'translateY(25px)',  offset: 0.3}),
    style({opacity: 1, transform: 'translateY(0)',     offset: 1.0})
  ]))
]) //you get the idea ... *Import statement is taken out for brevity

无论如何,“动画”可以使用上面的 styleUrls 和 templateUrl 之类的参考吗?我见过有人将其称为 const 但想知道是否有“Angular 官方”方式。

4

2 回答 2

32

您可以将动画保存在单独的文件中。

// animations.ts
import { trigger, state, style, transition, animate } from '@angular/animations';

export const Animations = {
    animeTrigger: trigger('animeTrigger', [
        state('in', style({transform: 'translateY(0)'})),
        transition('void => *', [
        animate(700, keyframes([
            style({opacity: 0, transform: 'translateY(-100%)', offset: 0}),
            style({opacity: 1, transform: 'translateY(25px)',  offset: 0.3}),
            style({opacity: 1, transform: 'translateY(0)',     offset: 1.0}) 
        ]))
    ])

}

零件

import { Animations } from './animations'

@Component({
    selector: 'page-that-needs-anime',
    templateUrl: './anime.component.html',
    styleUrls: ['./anime.component.scss'],
    animations: [
        Animations.animeTrigger
    ]
})
于 2017-03-29T14:43:22.703 回答
1

取自文档:

创建可重用的动画

要创建可重复使用的动画,请使用 animation() 方法在单独的 .ts 文件中定义动画,并将此动画定义声明为 const 导出变量。然后,您可以使用 useAnimation() API 在任何应用程序组件中导入和重用此动画。

*src/app/animations.ts*

import {
  animation, trigger, animateChild, group,
  transition, animate, style, query
} from '@angular/animations';

export const transAnimation = animation([
  style({
    height: '{{ height }}',
    opacity: '{{ opacity }}',
    backgroundColor: '{{ backgroundColor }}'
  }),
  animate('{{ time }}')
]);

在上面的代码片段中,通过将 transAnimation 声明为导出变量,它可以重用。

注意:高度、不透明度、背景颜色和时间输入在运行时被替换。

您可以在组件类中导入可重用的 transAnimation 变量,并使用 useAnimation() 方法重用它,如下所示。

*src/app/open-close.component.ts*

import { Component } from '@angular/core';
import { useAnimation, transition, trigger, style, animate } from '@angular/animations';
import { transAnimation } from './animations';

@Component({
    trigger('openClose', [
      transition('open => closed', [
        useAnimation(transAnimation, {
          params: {
            height: 0,
            opacity: 1,
            backgroundColor: 'red',
            time: '1s'
          }
        })
      ])
    ])
  ],
})

引自:https ://angular.io/guide/reusable-animations

于 2019-06-22T16:13:31.560 回答