目次
Todos
キーフレーム アニメーションの使用法 keyframes
#Angular には、アニメーションの実行開始時とアニメーションの実行完了後の 2 つのコールバック関数が用意されています。
query メソッドを提供します
state メソッドは状態を定義するために使用されます。
ホームページ ウェブフロントエンド jsチュートリアル ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。

ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。

May 26, 2022 am 10:53 AM
angular angular.js

この記事では、angular のアニメーションを深く理解し、アニメーションの作成方法を簡単に紹介し、キーフレーム アニメーション、アニメーション コールバック、再利用可能なアニメーション、インターリーブ アニメーション、その他の知識について説明します。ポイント. 参考になれば幸いです!

ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。

#ステータス


1. ステータスとは

State は、移動のさまざまな段階で移動される要素のスタイルを表します。 [関連チュートリアルの推奨事項: "

angular チュートリアル"]

ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。

##2. ステータスの種類 #Angular には、3 種類の状態があります。つまり、void

*custom
voidステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。: この状態は、要素がメモリ内に作成されたが、まだ DOM に追加されていない、または DOM から削除されていないときに発生します。
#*

: 要素が挿入された後の状態DOM ツリーに到達するか、DOM ツリーにすでに存在する要素の状態 (デフォルト状態とも呼ばれます)

custom

: カスタム状態、要素はデフォルトでページ上にあります (Movement から)パネルの折り畳みと展開など、ある状態から別の状態へ。

3. 入口と出口のアニメーション

入口アニメーションとは、その後にアニメーションの形式でユーザーの目の前に表示される要素を指します。開始アニメーション ステータスは void => *

で表され、エイリアスは

:enter

となります。終了アニメーションは、要素が削除されるまでの実行期間に戻ります。アニメーションに別れを告げ、終了アニメーションのステータスには

* => voidステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。 を使用します。エイリアスは
:leave です。

## すぐに始めるには ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。

1. アニメーション機能を使用する前に、アニメーション モジュール、つまり BrowserAnimationsModule


import { BrowserAnimationsModule } from "@angular/platform-browser/animations"

@NgModule({
  imports: [BrowserAnimationsModule],
})
export class AppModule {}
ログイン後にコピー
2. デフォルトのコード分析、todo タスクの削除とタスクの追加
<!-- 在 index.html 文件中引入 bootstrap.min.css -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" />
ログイン後にコピー
<div class="container">
  <h2 id="Todos">Todos</h2>
  <div class="form-group">
    <input (keyup.enter)="addItem(input)" #input type="text" class="form-control" placeholder="add todos" />
  </div>
  <ul class="list-group">
    <li (click)="removeItem(i)" *ngFor="let item of todos; let i = index" class="list-group-item">
      {{ item }}
    </li>
  </ul>
</div>
ログイン後にコピー
import { Component } from "@angular/core"

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styles: []
})
export class AppComponent {
  // todo 列表
  todos: string[] = ["Learn Angular", "Learn RxJS", "Learn NgRx"]
	// 添加 todo
  addItem(input: HTMLInputElement) {
    this.todos.push(input.value)
    input.value = ""
  }
	// 删除 todo
  removeItem(index: number) {
    this.todos.splice(index, 1)
  }
}
ログイン後にコピー

3. アニメーションの作成

trigger メソッドは、アニメーションの作成、アニメーション名の指定に使用されます

  • transition メソッドは、アニメーションの動作状態、終了アニメーションまたは開始アニメーション、またはカスタム状態アニメーションの指定に使用されます。

  • style メソッドは、さまざまな状態の要素に対応するスタイルを設定するために使用されます。

  • animate メソッドは、モーション パラメータを設定するために使用されます、アニメーション モーションなど。時間、遅延イベント、モーション フォーム

  • @Component({
      animations: [
        // 创建动画, 动画名称为 slide
        trigger("slide", [
          // 指定入场动画 注意: 字符串两边不能有空格, 箭头两边可以有也可以没有空格
          // void => * 可以替换为 :enter
          transition("void => *", [
            // 指定元素未入场前的样式
            style({ opacity: 0, transform: "translateY(40px)" }),
            // 指定元素入场后的样式及运动参数
            animate(250, style({ opacity: 1, transform: "translateY(0)" }))
          ]),
          // 指定出场动画
          // * => void 可以替换为 :leave
          transition("* => void", [
            // 指定元素出场后的样式和运动参数
            animate(600, style({ opacity: 0, transform: "translateX(100%)" }))
          ])
        ])
      ]
    })
    ログイン後にコピー

    注: エントリ アニメーションでは要素のデフォルト状態を指定する必要はありません。Angular は次のように void 状態をクリアします。デフォルトの状態

    trigger("slide", [
      transition(":enter", [
        style({ opacity: 0, transform: "translateY(40px)" }),
        animate(250)
      ]),
      transition(":leave", [
     		animate(600, style({ opacity: 0, transform: "translateX(100%)" }))
      ])
    ])
    ログイン後にコピー
  • 注: アニメーションのモーション パラメータを設定するには、animate メソッドの 1 つのパラメータを文字列タイプに変更する必要があります。
// 动画执行总时间 延迟时间 (可选) 运动形式 (可选)
animate("600ms 1s ease-out", style({ opacity: 0, transform: "translateX(100%)" }))
ログイン後にコピー

キーフレーム アニメーション

キーフレーム アニメーションの使用法 keyframes

メソッド定義

transition(":leave", [
  animate(
    600,
    keyframes([
      style({ offset: 0.3, transform: "translateX(-80px)" }),
      style({ offset: 1, transform: "translateX(100%)" })
    ])
  )
])
ログイン後にコピー
アニメーション コールバック

#Angular には、アニメーションの実行開始時とアニメーションの実行完了後の 2 つのコールバック関数が用意されています。

<li @slide (@slide.start)="start($event)" (@slide.done)="done($event)"></li>
ログイン後にコピー
import { AnimationEvent } from "@angular/animations"

start(event: AnimationEvent) {
  console.log(event)
}
done(event: AnimationEvent) {
  console.log(event)
}
ログイン後にコピー

再利用可能なアニメーションの作成


1. 定義を配置します。アニメーションを別のファイルに保存します。これは、コンポーネント呼び出しの方が便利です。

import { animate, keyframes, style, transition, trigger } from "@angular/animations"

export const slide = trigger("slide", [
  transition(":enter", [
    style({ opacity: 0, transform: "translateY(40px)" }),
    animate(250)
  ]),
  transition(":leave", [
    animate(
      600,
      keyframes([
        style({ offset: 0.3, transform: "translateX(-80px)" }),
        style({ offset: 1, transform: "translateX(100%)" })
      ])
    )
  ])
])
ログイン後にコピー
import { slide } from "./animations"

@Component({
  animations: [slide]
})
ログイン後にコピー

2. 特定のアニメーション定義を抽出して、複数のアニメーション呼び出しを容易にします。

import {animate, animation, keyframes, style, transition, trigger, useAnimation} from "@angular/animations"

export const slideInUp = animation([
  style({ opacity: 0, transform: "translateY(40px)" }),
  animate(250)
])

export const slideOutLeft = animation([
  animate(
    600,
    keyframes([
      style({ offset: 0.3, transform: "translateX(-80px)" }),
      style({ offset: 1, transform: "translateX(100%)" })
    ])
  )
])

export const slide = trigger("slide", [
  transition(":enter", useAnimation(slideInUp)),
  transition(":leave", useAnimation(slideOutLeft))
])
ログイン後にコピー

3. アニメーション呼び出し時に、移動時間、遅延時間、移動の合計時間を

export const slideInUp = animation(
  [
    style({ opacity: 0, transform: "translateY(40px)" }),
    animate("{{ duration }} {{ delay }} {{ easing }}")
  ],
  {
    params: {
      duration: "400ms",
      delay: "0s",
      easing: "ease-out"
    }
  }
)
ログイン後にコピー
transition(":enter", useAnimation(slideInUp, {params: {delay: "1s"}}))
ログイン後にコピー

クエリ要素実行アニメーション

## 形式で転送します。 ##Angular 要素を検索し、要素のアニメーションを作成するための

query メソッドを提供します

import { slide } from "./animations"

animations: [
  slide,
  trigger("todoAnimations", [
    transition(":enter", [
      query("h2", [
        style({ transform: "translateY(-30px)" }),
        animate(300)
      ]),
      // 查询子级动画 使其执行
      query("@slide", animateChild())
    ])
  ])
]
ログイン後にコピー
<div class="container" @todoAnimations>
  <h2 id="Todos">Todos</h2>
  <ul class="list-group">
    <li
      @slide
      (click)="removeItem(i)"
      *ngFor="let item of todos; let i = index"
      class="list-group-item"
    >
      {{ item }}
    </li>
  </ul>
</div>
ログイン後にコピー

デフォルトでは、親アニメーションと子アニメーションが順番に実行され、親アニメーションが最初に実行されます。レベル アニメーションの場合は、

group メソッドを使用して並列化できます。

trigger("todoAnimations", [
  transition(":enter", [
    group([
      query("h2", [
        style({ transform: "translateY(-30px)" }),
        animate(300)
      ]),
      query("@slide", animateChild())
    ])
  ])
])
ログイン後にコピー

インターレース アニメーション

Angular は、複数の要素を実行するための stagger メソッドを提供します。同じアニメーションを同時に実行する場合、各要素のアニメーションの実行を順番に遅らせます。

transition(":enter", [
  group([
    query("h2", [
      style({ transform: "translateY(-30px)" }),
      animate(300)
    ]),
    query("@slide", stagger(200, animateChild()))
  ])
])
ログイン後にコピー
注: stagger メソッドはクエリ メソッド内でのみ使用できます


カスタム状態アニメーション

Angular が提供する

state メソッドは状態を定義するために使用されます。


#1. デフォルトのコード分析

<div class="container">
  <div class="panel panel-default">
    <div class="panel-heading" (click)="toggle()">
      一套框架, 多种平台, 移动端 & 桌面端
    </div>
    <div class="panel-body">
      <p>
        使用简单的声明式模板,快速实现各种特性。使用自定义组件和大量现有组件,扩展模板语言。在几乎所有的
        IDE 中获得针对 Angular
        的即时帮助和反馈。所有这一切,都是为了帮助你编写漂亮的应用,而不是绞尽脑汁的让代码“能用”。
      </p>
      <p>
        从原型到全球部署,Angular 都能带给你支撑 Google
        大型应用的那些高延展性基础设施与技术。
      </p>
      <p>
        通过 Web Worker 和服务端渲染,达到在如今(以及未来)的 Web
        平台上所能达到的最高速度。 Angular 让你有效掌控可伸缩性。基于
        RxJS、Immutable.js 和其它推送模型,能适应海量数据需求。
      </p>
      <p>
        学会用 Angular
        构建应用,然后把这些代码和能力复用在多种多种不同平台的应用上 ——
        Web、移动 Web、移动应用、原生应用和桌面原生应用。
      </p>
    </div>
  </div>
</div>
<style>
  .container {
    margin-top: 100px;
  }
  .panel-heading {
    cursor: pointer;
  }
</style>
ログイン後にコピー
import { Component } from "@angular/core"

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styles: []
})
export class AppComponent {
  isExpended: boolean = false
  toggle() {
    this.isExpended = !this.isExpended
  }
}
ログイン後にコピー

2. アニメーションの作成

trigger("expandCollapse", [
  // 使用 state 方法定义折叠状态元素对应的样式
  state(
    "collapsed",
    style({
      height: 0,
      overflow: "hidden",
      paddingTop: 0,
      paddingBottom: 0
    })
  ),
  // 使用 state 方法定义展开状态元素对应的样式
  state("expanded", style({ height: "*", overflow: "auto" })),
  // 定义展开动画
  transition("collapsed => expanded", animate("400ms ease-out")),
  // 定义折叠动画
  transition("expanded => collapsed", animate("400ms ease-in"))
])
ログイン後にコピー
<div class="panel-body" [@expandCollapse]="isExpended ? &#39;expanded&#39; : &#39;collapsed&#39;"></div>
ログイン後にコピー

ステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。アニメーションのルーティング

# ##################################

1、为路由添加状态标识,此标识即为路由执行动画时的自定义状态

const routes: Routes = [
  {
    path: "",
    component: HomeComponent,
    pathMatch: "full",
    data: {
      animation: "one" 
    }
  },
  {
    path: "about",
    component: AboutComponent,
    data: {
      animation: "two"
    }
  },
  {
    path: "news",
    component: NewsComponent,
    data: {
      animation: "three"
    }
  }
]
ログイン後にコピー

2、通过路由插座对象获取路由状态标识,并将标识传递给动画的调用者,让动画执行当前要执行的状态是什么

<div class="routerContainer" [@routerAnimations]="prepareRoute(outlet)">
  <router-outlet #outlet="outlet"></router-outlet>
</div>
ログイン後にコピー
import { RouterOutlet } from "@angular/router"

export class AppComponent {
  prepareRoute(outlet: RouterOutlet) {
    return (
      outlet &&
      outlet.activatedRouteData &&
      outlet.activatedRouteData.animation
    )
  }
}
ログイン後にコピー

3、将 routerContainer 设置为相对定位,将它的直接一级子元素设置成绝对定位

/* styles.css */
.routerContainer {
  position: relative;
}

.routerContainer > * {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
}
ログイン後にコピー

4、创建动画

trigger("routerAnimations", [
  transition("one => two, one => three, two => three", [
    query(":enter", style({ transform: "translateX(100%)", opacity: 0 })),
    group([
      query(
        ":enter",
        animate(
          "0.4s ease-in",
          style({ transform: "translateX(0)", opacity: 1 })
        )
      ),
      query(
        ":leave",
        animate(
          "0.4s ease-out",
          style({
            transform: "translateX(-100%)",
            opacity: 0
          })
        )
      )
    ])
  ]),
  transition("three => two, three => one, two => one", [
    query(
      ":enter",
      style({ transform: "translateX(-100%)", opacity: 0 })
    ),
    group([
      query(
        ":enter",
        animate(
          "0.4s ease-in",
          style({ transform: "translateX(0)", opacity: 1 })
        )
      ),
      query(
        ":leave",
        animate(
          "0.4s ease-out",
          style({
            transform: "translateX(100%)",
            opacity: 0
          })
        )
      )
    ])
  ])
])
ログイン後にコピー

更多编程相关知识,请访问:编程视频!!

以上がステータスとは何ですか? Angular でのアニメーションの詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu 24.04 に Angular をインストールする方法 Ubuntu 24.04 に Angular をインストールする方法 Mar 23, 2024 pm 12:20 PM

Angular.js は、動的アプリケーションを作成するための無料でアクセスできる JavaScript プラットフォームです。 HTML の構文をテンプレート言語として拡張することで、アプリケーションのさまざまな側面を迅速かつ明確に表現できます。 Angular.js は、コードの作成、更新、テストに役立つさまざまなツールを提供します。さらに、ルーティングやフォーム管理などの多くの機能も提供します。このガイドでは、Ubuntu24 に Angular をインストールする方法について説明します。まず、Node.js をインストールする必要があります。 Node.js は、ChromeV8 エンジンに基づく JavaScript 実行環境で、サーバー側で JavaScript コードを実行できます。ウブにいるために

Angular の学習ではスタンドアロン コンポーネントについて説明します (Standalone Component) Angular の学習ではスタンドアロン コンポーネントについて説明します (Standalone Component) Dec 19, 2022 pm 07:24 PM

この記事では、Angular の学習を継続し、Angular のスタンドアロン コンポーネント (Standalone Component) について簡単に理解できるようにします。

Angular Learning State Manager NgRx の詳細な説明 Angular Learning State Manager NgRx の詳細な説明 May 25, 2022 am 11:01 AM

この記事では、Angular のステートマネージャー NgRx について深く理解し、NgRx の使用方法を紹介します。

Angular で Monaco エディターを使用する方法の簡単な分析 Angular で Monaco エディターを使用する方法の簡単な分析 Oct 17, 2022 pm 08:04 PM

Angularでモナコエディタを使用するにはどうすればよいですか?以下の記事は、最近業務で使用したangularでのmonaco-editorの使い方を記録したものですので、皆様のお役に立てれば幸いです。

Angular のサーバーサイド レンダリング (SSR) について説明する記事 Angular のサーバーサイド レンダリング (SSR) について説明する記事 Dec 27, 2022 pm 07:24 PM

Angular Universal をご存知ですか?これは、Web サイトがより優れた SEO サポートを提供するのに役立ちます。

Angular + NG-ZORRO でバックエンド システムを迅速に開発 Angular + NG-ZORRO でバックエンド システムを迅速に開発 Apr 21, 2022 am 10:45 AM

この記事では、Angular の実践的な経験を共有し、angualr と ng-zorro を組み合わせてバックエンド システムを迅速に開発する方法を学びます。

フロントエンド開発に PHP と Angular を使用する方法 フロントエンド開発に PHP と Angular を使用する方法 May 11, 2023 pm 04:04 PM

インターネットの急速な発展に伴い、フロントエンド開発テクノロジーも常に改善され、反復されています。 PHP と Angular は、フロントエンド開発で広く使用されている 2 つのテクノロジーです。 PHP は、フォームの処理、動的ページの生成、アクセス許可の管理などのタスクを処理できるサーバー側スクリプト言語です。 Angular は、単一ページ アプリケーションの開発やコンポーネント化された Web アプリケーションの構築に使用できる JavaScript フレームワークです。この記事では、PHPとAngularをフロントエンド開発に使用する方法と、それらを組み合わせる方法を紹介します。

Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Mar 15, 2024 pm 04:51 PM

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

See all articles