Angular中的动画指南

170 阅读4分钟

简介

动画是你的网站的一个重要组成部分。它可以帮助我们提高用户体验,也可以在需要的地方唤起用户的注意。动画是通过随时间变化的样式来创建的,其时间可以由你控制。在这篇博客中,我将介绍Angular动画的基础知识和一个例子,以便更好地理解这个概念。

Angular中的动画

动画可以帮助你做一个漂亮的网页设计。如果你定义了结构良好的动画,你可以在你的网站上吸引用户。一个动画可以被定义为从一个状态到另一个状态的过渡。angular的动画系统是建立在CSS功能之上的。在angular中,我们定义了不同的状态。对于每个状态,定义样式,然后我们在这些状态之间切换以创建动画效果。这就是Angular中动画的基本理念。

Angular动画中的状态

Angular提供了三种状态,列举如下:

  • 空白:这是元素尚未成为DOM的一部分或从DOM中移除的状态。
  • 通配符(*):这是该元素的默认状态。
  • 自定义:这种状态需要明确定义,我们可以使用任何名称。

Angular动画中的函数

现在,这里有一些用于创建动画的重要函数:

  • 状态:这个函数接受一个自定义的状态名称和它的特定样式。
  • 触发器:这个函数包括一个状态和转换的数组。
  • 样式:它包括所有将被应用于特定状态的CSS样式。
  • 过渡:这个函数接受两个状态,我们要在它们之间进行转换。
  • Animate(动画):这个函数定义了过渡状态的长度和过渡的缓和。

现在,当你对所有的函数有了一个概述,我们可以在一个例子的帮助下更好地理解它们。

前提条件

首先,使用CLI命令创建一个Angular项目

ng new animationsDemo

现在在你喜欢的编辑器中打开该项目,目录结构是这样的。

为了在你的Angular项目中使用动画,我们需要在模块文件(app.module.ts)的进口数组中导入BrowserAnimationsModule。

import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule
  ]

现在我们移到我们要使用的组件中,并添加以下代码。

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

为了使用这些,我们正在导入它们。

在@Component装饰器中,我们一般有三个东西。但是对于动画,我们要添加一个这样的东西。

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css'],
  animations: [
    // animation triggers go here
  ]
})

演示例子

首先,让我们创建一个简单的组件,我们将在其中应用一些转场。这里是app.component.html文件

<div class="container">
  <h3 class="mt-3">Animations Demo in Angular</h3>
  <div class="item1">
  </div>
  <button type="button" class="btn btn-primary mt-3">Click me</button>
</div>

现在让我们来定义动画。我们将定义一个简单的动画,在app.component.ts文件中,我们将改变div的大小和颜色,同时从一个状态移动到另一个状态。

animations: [
    trigger('changeDivStyle', [
      state('start', style({
        width: '150px',
        height:'100px',
        background:'blue',
        transform:'translateX(0)'
      })),
      state('end', style({
        width: '300px',
        height:'150px',
        background:'green',
        transform:'translateX(50%)'
      })),
      transition('start<=>end', animate('1500ms'))
    ]),
  ]

在这里我们可以看到我们已经定义了两个状态,开始和结束。你可以给它起任何名字。对于每个状态,我们都定义了一些CSS。你可以在style()中使用所有的CSS属性。由于我们将在水平方向上移动div,我使用了transform属性。

在定义了状态之后,我们设置了过渡时间。这里我们将其设置为1500ms,也就是1.5秒。你可以根据你的需要改变这个速度。箭头<=>表示从开始到结束或从结束到开始的状态转换将需要1.5秒。如果你想单独定义,你可以这样做。

transition('start=>end', animate('1500ms')),
transition('end=>start', animate('2000ms'))

现在,像这样在类中设置初始状态,这样CSS就会应用于该div的起始状态。

export class AppComponent {
  title = 'AnimationsDemo';
  initialState='start';
}

现在要应用这个,我们需要在我们想要的HTML元素上使用带'@'的触发器名称。

<div [@triggerName]="expression">...</div>;

这里的表达式就是我们想要的初始状态。

在div元素中做如下修改

<div class="item1" [@changeDivStyle]=initialState>

我们将在点击按钮时触发动画,所以在按钮上做如下修改。

 <button type="button" class="btn btn-primary mt-3" (click)="toggleState()">Click me</button>

这里我们要调用一个函数toggleState,它将改变动画的状态。所以,现在让我们在ts文件中定义这个函数。

toggleState() {
    this.initialState = this.initialState === 'start' ? 'end' : 'start';
  }

在这里,我们将检查当前状态是否为 "开始",然后将其改为 "结束",否则将回到 "开始 "状态。

现在你已经准备好运行你的项目,你会看到动画在工作。

总结

到目前为止,我们已经学会了创建动画所需的所有功能,以及如何触发这些动画。这只是一个基本的例子,涵盖了Angular中的动画概念。你也可以创建复杂的动画。