Angular4.0動畫操作實例詳解
本文實例講述了Angular4.0動畫操作。分享給大家供大家參考,具體如下:
粗略的記錄一下angular4的動畫
先看一下angular中文網(wǎng)關(guān)于這個給的例子。
有兩個組件home,about。 路徑配置什么的這里就不細說了,之前的博文有說過,我就貼一下代碼,很好理解的,
需要import的東西我先說一下,我只貼了使用動畫要用的東西,其他的我省略了,
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
@NgModule({
...
imports: [
BrowserModule,
BrowserAnimationsModule,
AppRouting
],
...
})
在這個簡單的例子里我要對app.component.html里的內(nèi)容進行animate,所以我的
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
animations: [] // 這里代碼我省略了,先說一下結(jié)構(gòu),后面說具體實現(xiàn)。
})
以上就是需要寫動畫實現(xiàn)的基本結(jié)構(gòu),下面貼實現(xiàn)這個例子的代碼。為了方便閱讀,我把代碼解釋就貼在代碼旁邊
例一:
這是路由配置:
import {RouterModule, Routes} from '@angular/router';
import {HomeComponent} from "./home/home.component";
import {AboutComponent} from "./about/about.component";
const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent, data: { state: 'home' } },
{ path: 'about', component: AboutComponent, data: { state: 'about' } }
];
export const AppRouting = RouterModule.forRoot(routes, {
useHash: true
});
app.component.html
<nav> <a routerLink="home" routerLinkActive="active">Home</a> <a routerLink="about" routerLinkActive="active">About</a> </nav> <main [@routerTransition] = "gg(o)"> <router-outlet #o="outlet"></router-outlet> </main> <div [@queryAnimation]="goAnimate()"> <div class="content"> Blah blah blah </div> <h1>Title</h1> </div> <!-- [@routerTransition]="gg(o)" ,api:transition declares the sequence of animation steps that will be run when the provided stateChangeExpr value is satisfied. stateChangeExpr即等號左邊即動畫名稱,注意中括號和@符不能省略,等號右邊是一個函數(shù),也可以是變量,滿足條件便可以讓動畫進行,一個動畫可以多次使用 -->
app.component.ts
import { Component } from '@angular/core';
import {routerTransition} from './router.animation';
import {animate, group, query, stagger, style, transition, trigger} from "@angular/animations";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
animations: [
trigger('routerTransition', [ // 第一個參數(shù)是動畫名稱 stateChangeExpr
transition('* <=> *', [ // 指定什么時候執(zhí)行動畫,狀態(tài)的來源可以是簡單的對象屬性,也可以是由方法計算出來的值。重點是,我們得能從組件模板中讀取它。官網(wǎng)上有提供一些通配符,[傳送門](https://angular.cn/api/animations/transition)
query(':enter, :leave', style({ position: 'fixed', width: '100%' }), { optional: true }),
query('.block', style({ opacity: 0 }), { optional: true }),
group([ // block executes in parallel
query(':enter', [style({ transform: 'translateX(100%)' }),
animate('0.5s ease-in-out', style({ transform: 'translateX(0%)' }))], { optional: true }),
query(':leave', [style({ transform: 'translateX(0%)' }),
animate('0.5s ease-in-out', style({ transform: 'translateX(-100%)' }))], { optional: true })
]),
query(':enter .block', stagger(400, [style({ transform: 'translateY(100px)' }),
animate('1s ease-in-out', style({ transform: 'translateY(0px)', opacity: 1 })),
]), { optional: true }),
])
]),
]
})
export class AppComponent {
public exp = '';
gg(outlet) { // 傳遞進入的組件的信息
console.log(outlet.activatedRouteData.state);
return outlet.activatedRouteData.state;
}
}
效果動圖在最后。
比對著官網(wǎng)給的API,總結(jié)一下動畫部分~
我是按自己的理解說的,有不對的地方還請多多指教,共勉!O(∩_∩)O~
- stateChangeExpr
即動畫名稱,它的屬性值可以是字符串也可以是函數(shù),若是函數(shù),則每次狀態(tài)發(fā)生改變都會重新執(zhí)行,若函數(shù)返回true,則對應(yīng)的動畫就會執(zhí)行。

- transition
它里面的動畫只在滿足條件時執(zhí)行,過了這個點它就變回原始樣式了,
- state
可以保持動畫樣式
- :enter 、 :leave
即對應(yīng)void => * 、 * => void 狀態(tài)
例子二
app.component.html
<div [@queryAnimation]="goAnimate()"> <h1>Title</h1> <div class="content"> Blah blah blah </div> </div>
app.component.ts
import { Component } from '@angular/core';
import {animate, group, query, stagger, state, style, transition, trigger} from "@angular/animations";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
animations: [
trigger('queryAnimation', [
transition('* => *', [
query('h1', style({ opacity: 0 , color: 'red'})),
query('.content', style({ opacity: 0, color: 'green', width: '100px', height: '100px', border: '1px solid red' })),
query('h1', animate(1000, style({ opacity: 1, color: ' blue' }))),
query('.content', animate(1000, style({ opacity: 1, width: '50px', height: '100px', border: '10px solid green'})),
{optional: true}),
]),
transition(':leave', [
style({color: 'pink'}),
animate(2000)
])
]),
]
})
export class AppComponent {
public gg: string;
constructor() {
}
goAnimate() {
return true;
}
}

這個gif有點卡,但是可以大概看出路由切換時是有動畫的。這是上面兩個例子的效果圖
state只能放在trigger里,不能擱在transition里
目前就這么點,才看了一點,以后慢慢補充~~~
更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結(jié)》、《AngularJS入門與進階教程》及《AngularJS MVC架構(gòu)總結(jié)》
希望本文所述對大家AngularJS程序設(shè)計有所幫助。
相關(guān)文章
Angular企業(yè)級開發(fā)——MVC之控制器詳解
本篇文章主要介紹了Angular企業(yè)級開發(fā)——MVC之控制器詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
ANGULARJS中用NG-BIND指令實現(xiàn)單向綁定的例子
這篇文章主要介紹了ANGULARJS中用NG-BIND指令實現(xiàn)單向綁定的例子,本文簡單介紹AngularJS框架后,用一個實例演示{{}}插值法和ng-bind指令的使用,需要的朋友可以參考下2014-12-12
如何在Angular8.0下使用ngx-translate進行國際化配置
這篇文章主要介紹了如何在Angular8.0下使用ngx-translate進行國際化配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
使用AngularJS和PHP的Laravel實現(xiàn)單頁評論的方法
這篇文章主要介紹了使用AngularJS和PHP的Laravel實現(xiàn)單頁評論的方法,本文的示例是前端JavaScript和后端PHP聯(lián)合編程的典范,需要的朋友可以參考下2015-06-06

