Angular 動畫
angular animation現在是angular默認之外的一個官方組件庫,在angular2的時候它是作為核心組件庫的一部分,到了angular4的時候為了減小核心庫的體積,就把它單獨移出了核心組件,但是這并不說明它不重要,angular動畫是angular應用中重要的組成部分,而且它也是官方內建提供的支持,只不過不在angular core核心組件里了,
安裝動畫庫:
cnpm i --save @angular/animations
安裝完之后要在app.module.ts文件中導入
導入動畫模塊之后在app.component.ts文件中會有一個animations的元數據,元數據里面會規定好一些觸發器,觸發器的名字會在響應的元素中模板當中 ,@后面跟的是觸發器的名字。
import { environment } from '../environments/environment';
import { Component } from '@angular/core';
import { OverlayContainer } from '@angular/material';
import { trigger,state,transition,style,animate} from '@angular/animations';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
animations: [
trigger('square',
[
state('green', style({ 'background-color': 'green','height':'100px','transform':'translateX(0)' })),
state('red', style({ 'background-color': 'red','height':'50px','transform':'translateX(100%)' })),
transition('green => red', animate('0.2s 1s')),
transition('red => green', animate(500))
]
)
]
})
export class AppComponent {
squareState='red';
darkTheme = false;
constructor(private oc: OverlayContainer) {
}
swichTheme(dark) {
this.darkTheme = dark.checked;
this.oc.themeClass = dark ? 'myapp-dark-theme' : null;
}
onClick() {
this.squareState = this.squareState==='red' ? 'green' : 'red';
}
}
<div class="square" [@square]="squareState" (click)="onClick()"></div>
animations元數據的要素:
它會定義一個觸發器,當然你可以在animations當中定義多個觸發器,觸發器就是我規定好一個動畫,這個動畫由 state,transition這兩個基本元素來構成,動畫就是從一個狀態(state)遷移(state)到另一個狀態,transition用來說明這個狀態的遷移是什么樣的,以什么速度,什么時間來遷移。animate那個函數是用來輔助transition的,animate就是說以什么樣的形式來遷移。
animate函數有三個參數,最后一個參數是緩動函數(緩動函數是指動畫效果在執行時的速度,使其看起來更加真實)
W3C的Web Animation標準暫時無法支持所有的cubic-bezier函數
幀-就是動畫中最小單位的單幅影像畫面。
關鍵幀-物體運動或變化中的關鍵動作所處的那一幀
用關鍵幀實現的栗子:(主要用到keyframes方法)
import { environment } from '../environments/environment';
import { Component } from '@angular/core';
import { OverlayContainer } from '@angular/material';
import { trigger,state,transition,style,animate,keyframes} from '@angular/animations';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
animations: [
trigger('square',
[
state('green', style({ 'background-color': 'green','height':'100px','transform':'translateY(-100%)' })),
state('red', style({ 'background-color': 'red','height':'100px','transform':'translateY(100%)' })),
transition('green => red', animate('0.8s ease-in')),
transition('red => green', animate(5000, keyframes([
style({ 'transform': 'translateY(100%)' }),
style({ 'transform': 'translateY(98%)' }),
style({ 'transform': 'translateY(95%)' }),
style({ 'transform': 'translateY(90%)' }),
style({ 'transform': 'translateY(80%)' }),
style({ 'transform': 'translateY(60%)' }),
style({'transform':'translateY(30%)'}),
style({ 'transform': 'translateY(0%)' }),
style({ 'transform': 'translateY(-10%)' }),
style({ 'transform': 'translateY(-5%)' }),
style({ 'transform': 'translateY(-2%)' }),
style({ 'transform': 'translateY(0%)' }),
style({ 'transform': 'translateY(10%)' }),
style({ 'transform': 'translateY(150%)' }),
style({ 'transform': 'translateY(-15%)' }),
style({ 'transform': 'translateY(-40%)' }),
style({ 'transform': 'translateY(80%)' }),
style({ 'transform': 'translateY(90%)' }),
style({ 'transform': 'translateY(95%)' }),
style({ 'transform': 'translateY(100%)' }),
])))
]
)
]
})
export class AppComponent {
squareState='red';
darkTheme = false;
constructor(private oc: OverlayContainer) {
}
swichTheme(dark) {
this.darkTheme = dark.checked;
this.oc.themeClass = dark ? 'myapp-dark-theme' : null;
}
onClick() {
this.squareState = this.squareState==='red' ? 'green' : 'red';
}
}
智能推薦
Angular學習筆記36:Angular動畫(4):在動畫中增加回調事件函數
在動畫中增加回調事件函數 在動畫啟動和終止的時候,trigger()函數會有一些回調函數,在模版文件中,動畫事件都是可以通過$event來傳遞。 比如在模版中有一個trigger()為open,此時,常用的回調就可以使用:@open.start 和 @open.done。 拿之前的飛入飛出動畫來實驗: 在模版文件中,增加一個start的回調: 這時候,增加了一個關于fly的start的回調,再修改...
如何在Angular 6中使用動畫
在本教程中,您將了解動畫在改善用戶體驗方面的重要性。 我將向您展示如何在動畫組件和Bootstrap的幫助下將動畫合并到Angular 6應用程序中。 動畫在用戶設計中的作用 大多數網絡用戶是視覺生物,因此會響應視覺對象。 這意味著作為設計師,您必須找到一種在設計中融入動畫的方法。 當涉及到用戶與您的網站或應用的交互時,動畫可以證明是一種有用的工具。 但是,這并不意味著當您使用動畫時,用戶會被您的...
angular7項目中引入動畫AOS庫
angular7項目中引入動畫AOS庫 1 安裝依賴 npm install aos --save-dev 2 在angular.json中引入文件 3 初始化AOS 具體使用方法參考:https://www.xyhtml5.com/3322.html...
6. Angular中的 Dom操作以及@ViewChild 以及Angular執行css3動畫
參考視頻:https://www.bilibili.com/video/av50917863?p=8 Angular8****-IT營配套筆記如下(參考自大地老師): 一、Angular 中的 dom 操作(原生 js) 二、Angular 中的 dom 操作(ViewChild ) 三、父子組件中通過 ViewChild 調用子組件的方法 1. 調用子組件給子組件定義一個名稱 2. 引入 Vie...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...