在使用动画功能之前,需要引入动画模块,即 BrowserAnimationsModule

  1. import { BrowserAnimationsModule } from "@angular/platform-browser/animations"
  2. @NgModule({
  3. imports: [BrowserAnimationsModule],
  4. })
  5. export class AppModule {}

默认代码解析,todo 之删除任务和添加任务

  1. <!-- 在 index.html 文件中引入 bootstrap.min.css -->
  2. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" />
  1. <div class="container">
  2. <h2>Todos</h2>
  3. <div class="form-group">
  4. <input (keyup.enter)="addItem(input)" #input type="text" class="form-control" placeholder="add todos" />
  5. </div>
  6. <ul class="list-group">
  7. <li (click)="removeItem(i)" *ngFor="let item of todos; let i = index" class="list-group-item">
  8. {{ item }}
  9. </li>
  10. </ul>
  11. </div>
  1. import { Component } from "@angular/core"
  2. @Component({
  3. selector: "app-root",
  4. templateUrl: "./app.component.html",
  5. styles: []
  6. })
  7. export class AppComponent {
  8. // todo 列表
  9. todos: string[] = ["Learn Angular", "Learn RxJS", "Learn NgRx"]
  10. // 添加 todo
  11. addItem(input: HTMLInputElement) {
  12. this.todos.push(input.value)
  13. input.value = ""
  14. }
  15. // 删除 todo
  16. removeItem(index: number) {
  17. this.todos.splice(index, 1)
  18. }
  19. }

创建动画

  • trigger 方法用于创建动画,指定动画名称
  • transition 方法用于指定动画的运动状态,出场动画或者入场动画,或者自定义状态动画。
  • style 方法用于设置元素在不同的状态下所对应的样式
  • animate 方法用于设置运动参数,比如动画运动时间,延迟事件,运动形式

    1. @Component({
    2. animations: [
    3. // 创建动画, 动画名称为 slide
    4. trigger("slide", [
    5. // 指定入场动画 注意: 字符串两边不能有空格, 箭头两边可以有也可以没有空格
    6. // void => * 可以替换为 :enter
    7. transition("void => *", [
    8. // 指定元素未入场前的样式
    9. style({ opacity: 0, transform: "translateY(40px)" }),
    10. // 指定元素入场后的样式及运动参数
    11. animate(250, style({ opacity: 1, transform: "translateY(0)" }))
    12. ]),
    13. // 指定出场动画
    14. // * => void 可以替换为 :leave
    15. transition("* => void", [
    16. // 指定元素出场后的样式和运动参数
    17. animate(600, style({ opacity: 0, transform: "translateX(100%)" }))
    18. ])
    19. ])
    20. ]
    21. })
    1. <li @slide></li>
  • 注意:入场动画中可以不指定元素的默认状态,Angular 会将 void 状态清空作为默认状态

    1. trigger("slide", [
    2. transition(":enter", [
    3. style({ opacity: 0, transform: "translateY(40px)" }),
    4. animate(250)
    5. ]),
    6. transition(":leave", [
    7. animate(600, style({ opacity: 0, transform: "translateX(100%)" }))
    8. ])
    9. ])

    注意:要设置动画的运动参数,需要将 animate 方法的一个参数更改为字符串类型

    1. // 动画执行总时间 延迟时间 (可选) 运动形式 (可选)
    2. animate("600ms 1s ease-out", style({ opacity: 0, transform: "translateX(100%)" }))