- Angular 4 教程
- Angular 4 - 首页
- Angular 4 – 概览
- Angular 4 – 环境设置
- Angular 4 – 项目设置
- Angular 4 – 组件
- Angular 4 – 模块
- Angular 4 – 数据绑定
- Angular 4 – 事件绑定
- Angular 4 – 模板
- Angular 4 – 指令
- Angular 4 – 管道
- Angular 4 – 路由
- Angular 4 – 服务
- Angular 4 – Http 服务
- Angular 4 – 表单
- Angular 4 - 动画
- Angular 4 – 材质设计
- Angular 4 – CLI
- Angular 4 – 示例
- Angular 4 有用资源
- Angular 4 - 快速指南
- Angular 4 - 有用资源
- Angular 4 - 讨论
Angular 4 - 动画
动画在 html 元素之间添加了许多交互。Angular2 中也提供了动画功能。Angular 4 与 Angular2 的区别在于,动画不再是 @angular/core 库的一部分,而是一个需要在 app.module.ts 中导入的单独包。
首先,我们需要导入库,如下所示:
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
需要将 BrowserAnimationsModule 添加到 app.module.ts 中的导入数组中,如下所示:
app.module.ts
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { AppComponent } from './app.component'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, BrowserAnimationsModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
在 app.component.html 中,我们添加了需要进行动画的 html 元素。
<div> <button (click)="animate()">Click Me</button> <div [@myanimation] = "state" class="rotate"> <img src="assets/images/img.png" width="100" height="100"> </div> </div>
对于主 div,我们添加了一个按钮和一个包含图像的 div。有一个点击事件,调用 animate 函数。对于 div,添加了 @myanimation 指令并将其值设置为 state。
现在让我们看看定义动画的 app.component.ts 文件。
import { Component } from '@angular/core'; import { trigger, state, style, transition, animate } from '@angular/animations'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], styles:[` div{ margin: 0 auto; text-align: center; width:200px; } .rotate{ width:100px; height:100px; border:solid 1px red; } `], animations: [ trigger('myanimation',[ state('smaller',style({ transform : 'translateY(100px)' })), state('larger',style({ transform : 'translateY(0px)' })), transition('smaller <=> larger',animate('300ms ease-in')) ]) ] }) export class AppComponent { state: string = "smaller"; animate() { this.state= this.state == 'larger' ? 'smaller' : 'larger'; } }
我们必须导入要在 .ts 文件中使用的动画函数,如上所示。
import { trigger, state, style, transition, animate } from '@angular/animations';
在这里,我们从 @angular/animations 中导入了 trigger、state、style、transition 和 animate。
现在,我们将动画属性添加到 @Component() 装饰器中:
animations: [ trigger('myanimation',[ state('smaller',style({ transform : 'translateY(100px)' })), state('larger',style({ transform : 'translateY(0px)' })), transition('smaller <=> larger',animate('300ms ease-in')) ]) ]
Trigger 定义动画的开始。第一个参数是需要应用动画的 html 标签要赋予的动画名称。第二个参数是我们导入的函数 - state、transition 等。
state 函数包含元素将在其间过渡的动画步骤。现在我们定义了两个状态,smaller 和 larger。对于 smaller 状态,我们给出了样式 transform:translateY(100px) 和 transform:translateY(100px)。
Transition 函数向 html 元素添加动画。第一个参数获取状态,即开始和结束;第二个参数接受 animate 函数。animate 函数允许您定义过渡的长度、延迟和缓动。
现在让我们看看 .html 文件,看看 transition 函数是如何工作的。
<div> <button (click)="animate()">Click Me</button> <div [@myanimation] = "state" class="rotate"> <img src="assets/images/img.png" width="100" height="100"> </div> </div>
在 @component 指令中添加了一个 style 属性,它将 div 居中对齐。让我们考虑以下示例来理解这一点:
styles:[` div{ margin: 0 auto; text-align: center; width:200px; } .rotate{ width:100px; height:100px; border:solid 1px red; } `],
在这里,使用特殊字符 [``] 向 html 元素添加样式(如果有)。对于 div,我们给出了在 app.component.ts 文件中定义的动画名称。
点击按钮时,它会调用 animate 函数,该函数在 app.component.ts 文件中定义如下:
export class AppComponent { state: string = "smaller"; animate() { this.state= this.state == ‘larger’? 'smaller' : 'larger'; } }
定义了 state 变量,并将其默认值设置为 smaller。animate 函数在点击时更改状态。如果状态为 larger,它将转换为 smaller;如果为 smaller,它将转换为 larger。
浏览器中的输出 (https://127.0.0.1:4200/) 将如下所示:
点击“点击我”按钮后,图像的位置会发生变化,如下面的屏幕截图所示:
transform 函数应用于 y 方向,当点击“点击我”按钮时,它从 0 更改为 100px。图像存储在 assets/images 文件夹中。