日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
創(chuàng)新互聯Angular教程:Angular復雜序列

前提條件

對下列概念有基本的理解:

創(chuàng)新互聯建站服務項目包括光澤網站建設、光澤網站制作、光澤網頁制作以及光澤網絡營銷策劃等。多年來,我們專注于互聯網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯網行業(yè)的解決方案,光澤網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到光澤省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

  • Angular 動畫簡介
  • 轉場與觸發(fā)器

到目前為止,我們已經學過了單個 HTML 元素的簡單動畫。Angular 還允許你在進入和離開頁面時播放 "動畫協調序列",比如當整個網格或元素列表進入或離開頁面時,多個條目的動畫之間需要彼此協調時間。你可以選擇并行執(zhí)行多個動畫,或者按順序逐個運行離散動畫。

用來控制復雜動畫序列的函數如下:

函數

詳情

query()

用于查找一個或多個內部 HTML 元素。

stagger()

用于為多元素動畫應用級聯延遲。

?group()?

用于并行執(zhí)行多個動畫步驟。

sequence()

用于逐個順序執(zhí)行多個動畫步驟。

query() 函數

大多數復雜動畫都依賴 ?query()? 函數來查找子元素并對其應用動畫,基本的例子是:

例子

詳情

query() 后跟 animate()

用于查詢簡單的 HTML 元素并直接對它們應用動畫。

query() 后跟 animateChild()

用于查詢子元素,這些元素本身就應用了動畫元數據并觸發(fā)這樣的動畫(否則將被當前/父元素的動畫阻止)。

query() 的第一個參數是一個 css 選擇器字符串,它還可以包含以下 Angular 特定的標記:

標記

詳情

:enter
:leave

:enter
:leave

用于進入/離開元素。

:animating

對于當前正在播放動畫的元素。

@*
@triggerName

對于具有任何(或特定)觸發(fā)器的元素。

:self

動畫元素本身。

進入和離開元素

并非所有子元素都會實際上被認為是進入/離開;有時,這可能是違反直覺和令人困惑的。

你還可以在 Querying 選項卡下的動畫實時示例(在 動畫介紹部分)中看到這方面的插圖。

使用 query() 和 stagger()(交錯)函數執(zhí)行多元素動畫

通過 ?query()? 查詢子元素后,?stagger()? 函數允許你定義每個查詢的動畫項之間的時間間隙,從而為元素之間延遲設置動畫。

下面的例子演示了如何使用 ?query()? 和 ?stagger()? 函數對依次添加的英雄列表從上到下播放動畫(有少許延遲)。

  • 用 ?query()? 查閱正在進入或離開頁面的任意元素。該查詢會找出那些符合某種匹配 CSS 選擇器的元素
  • 對每個元素,使用 ?style()? 為其設置初始樣式。使其變得透明,并使用 ?transform ?將其移出位置,以便它能滑入后就位。
  • 使用 ?stagger()? 來在每個動畫之間延遲 30 毫秒
  • 對屏幕上的每個元素,根據一條自定義緩動曲線播放 0.5 秒的動畫,同時將其淡入,而且逐步取消以前的位移效果
animations: [
  trigger('pageAnimations', [
    transition(':enter', [
      query('.hero', [
        style({opacity: 0, transform: 'translateY(-100px)'}),
        stagger(30, [
          animate('500ms cubic-bezier(0.35, 0, 0.25, 1)',
          style({ opacity: 1, transform: 'none' }))
        ])
      ])
    ])
  ]),

使用 group() 函數播放并行動畫

你已經了解了如何在兩個連續(xù)的動畫之間添加延遲。不過你可能還想配置一些并行的動畫。比如,你可能希望為同一個元素的兩個 CSS 屬性設置動畫,但要為每個屬性使用不同的 ?easing ?函數。這時,你可以使用動畫函數 ?group()?。

注意:

?
group()?函數用于對動畫
步驟進行分組,而不是針對動畫元素。

在下面的例子中,對 ?:enter? 和 ?:leave? 使用分組,可以配置兩種不同的時序。它們會同時作用于同一個元素,但彼此獨立運行。

animations: [
  trigger('flyInOut', [
    state('in', style({
      width: '*',
      transform: 'translateX(0)', opacity: 1
    })),
    transition(':enter', [
      style({ width: 10, transform: 'translateX(50px)', opacity: 0 }),
      group([
        animate('0.3s 0.1s ease', style({
          transform: 'translateX(0)',
          width: '*'
        })),
        animate('0.3s ease', style({
          opacity: 1
        }))
      ])
    ]),
    transition(':leave', [
      group([
        animate('0.3s ease', style({
          transform: 'translateX(50px)',
          width: 10
        })),
        animate('0.3s 0.2s ease', style({
          opacity: 0
        }))
      ])
    ])
  ])
]

順序動畫與平行動畫

復雜動畫中可以同時發(fā)生很多事情。但是當你要創(chuàng)建一個需要讓幾個子動畫逐個執(zhí)行的動畫時,該怎么辦呢?以前我們使用 ?group()? 來同時并行運行多個動畫。

第二個名叫 ?sequence()? 的函數會讓你一個接一個地運行這些動畫。在 ?sequence()? 中,這些動畫步驟由 ?style()? 或 ?animate()? 的函數調用組成。

  • ?style()? 用來立即應用所指定的樣式數據。
  • ?animate()? 用來在一定的時間間隔內應用樣式數據。

過濾器動畫范例

來看看范例應用中的另一個動畫。在 Filter/Stagger 頁,往 Search Heroes 文本框中輸入一些文本,比如 ?Magnet ?或 ?tornado?。

過濾器會在你輸入時實時工作。每當你鍵入一個新字母時,就會有一些元素離開頁面,并且過濾條件也會逐漸變得更加嚴格。相反,當你刪除過濾器中的每個字母時,英雄列表也會逐漸重新進入頁面中。

HTML 模板中包含一個名叫 ?filterAnimation ?的觸發(fā)器。




  • {{ hero.id }} {{ hero.name }}

該組件裝飾器中的 ?filterAnimation ?包含三個轉場。

@Component({
  animations: [
    trigger('filterAnimation', [
      transition(':enter, * => 0, * => -1', []),
      transition(':increment', [
        query(':enter', [
          style({ opacity: 0, width: 0 }),
          stagger(50, [
            animate('300ms ease-out', style({ opacity: 1, width: '*' })),
          ]),
        ], { optional: true })
      ]),
      transition(':decrement', [
        query(':leave', [
          stagger(50, [
            animate('300ms ease-out', style({ opacity: 0, width: 0 })),
          ]),
        ])
      ]),
    ]),
  ]
})
export class HeroListPageComponent implements OnInit {
  heroesTotal = -1;

  get heroes() { return this._heroes; }
  private _heroes: Hero[] = [];

  ngOnInit() {
    this._heroes = HEROES;
  }

  updateCriteria(criteria: string) {
    criteria = criteria ? criteria.trim() : '';

    this._heroes = HEROES.filter(hero => hero.name.toLowerCase().includes(criteria.toLowerCase()));
    const newTotal = this.heroes.length;

    if (this.heroesTotal !== newTotal) {
      this.heroesTotal = newTotal;
    } else if (!criteria) {
      this.heroesTotal = -1;
    }
  }
}

這個例子中的代碼包含下列任務:

  • 當用戶首次打開或導航到此頁面時,跳過所有動畫(該動畫會壓扁已經存在的內容,因此它只會作用于那些已經存在于 DOM 中的元素)
  • 根據搜索框中的值過濾英雄

對于每次匹配:

  • 通過將元素的不透明度和寬度設置為 0 來隱藏正在離開 DOM 的元素
  • 對正在進入 DOM 的元素,播放一個 300 毫秒的動畫。在動畫期間,該元素采用其默認寬度和不透明度。
  • 如果有多個匹配的元素正在進入或離開 DOM,則從頁面頂部的元素開始對每個元素進行交錯(stagger),每個元素之間的延遲為 50 毫秒

在重新排序列表的條目時設置動畫

盡管 Angular 開箱即用的支持 ?*ngFor? 列表項動畫,但如果只是它們的順序變化了,就無法支持。因為 Angular 會忘記哪個元素是哪個元素,從而導致這些動畫被破壞。幫助 Angular 跟蹤此類元素的唯一方法是將 ?TrackByFunction ?分配給 ?NgForOf ?指令。這可確保 Angular 始終知道哪個元素是哪個,從而允許它始終將正確的動畫應用于正確的元素。

重要:

如果你需要為 ?
*ngFor? 列表的條目設置動畫,并且此類條目的順序有可能在運行時更改,請始終使用 ?
TrackByFunction?。

動畫序列總結

Angular 中這些用于多元素動畫的函數,都要從 ?query()? 開始,查找出內部元素,比如找出某個 ?

? 中的所有圖片。其余函數 ?stagger()?、?group()? 和 ?sequence()? 會以級聯方式或你的自定義邏輯來控制要如何應用多個動畫步驟。


網站欄目:創(chuàng)新互聯Angular教程:Angular復雜序列
URL分享:http://www.5511xx.com/article/dhshccg.html