本文实例讲述了Angular4.0动画操作。分享给大家供大家参考,具体如下:
粗略的记录一下angular4的动画
先看一下angular中文网关于这个给的例子。
有两个组件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里的内容进行animate,所以我的
app.component.ts
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], animations: [] // 这里代码我省略了,先说一下结构,后面说具体实现。 })
以上就是需要写动画实现的基本结构,下面贴实现这个例子的代码。为了方便阅读,我把代码解释就贴在代码旁边
例一:
这是路由配置:
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即等号左边即动画名称,注意中括号和@符不能省略,等号右边是一个函数,也可以是变量,满足条件便可以让动画进行,一个动画可以多次使用 -->
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', [ // 第一个参数是动画名称 stateChangeExpr transition('* <=> *', [ // 指定什么时候执行动画,状态的来源可以是简单的对象属性,也可以是由方法计算出来的值。重点是,我们得能从组件模板中读取它。官网上有提供一些通配符,[传送门](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; } }
效果动图在最后。
比对着官网给的API,总结一下动画部分~
我是按自己的理解说的,有不对的地方还请多多指教,共勉!O(∩_∩)O~
- stateChangeExpr
即动画名称,它的属性值可以是字符串也可以是函数,若是函数,则每次状态发生改变都会重新执行,若函数返回true,则对应的动画就会执行。
- transition
它里面的动画只在满足条件时执行,过了这个点它就变回原始样式了,
- state
可以保持动画样式
- :enter 、 :leave
即对应void => * 、 * => void 状态
例子二
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里
目前就这么点,才看了一点,以后慢慢补充~~~
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》
希望本文所述对大家AngularJS程序设计有所帮助。
Angular4.0,动画
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- [音展纪念碟]2006年《TAA台湾第十六届国际HI-ENDHI-FI音响展》2cd[WAV]
- 中国音乐地图之听见西藏山歌牧歌酒歌2020[WAV分轨]
- 王宏伟2017-永远的红飘带[太平洋影音][WAV+CUE]
- 费翔.1997-NOW现在【第一中国】【WAV+CUE】
- 新格合唱团.1981-我唱你和2辑(滚石新格民歌系列)【新格】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 雨果唱片-《金唛系列-蔷薇依韵琼瑶》WAV
- 陈百强《凝望(2012华纳LPCD45限量版)[DMI]》[WAV整轨]
- 模拟之声慢刻CD《徐小凤45周年》[德国母带][低速原抓WAV+CUE]
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- 《王菲 单曲合集》[FlAC/分轨][520MB]
- 《费玉清 原味再现 水长流》[WAV+CUE][430MB]
- 群星.1992-畅销榜老歌金曲10CD【风格】【WAV+CUE】
- 孙悦.2024-时光音乐会【金蜂】【WAV+CUE】