博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angular2 学习笔记 ( animation 动画 )
阅读量:6196 次
发布时间:2019-06-21

本文共 3743 字,大约阅读时间需要 12 分钟。

refer : 

https://angular.io/guide/animations

https://github.com/angular/angular/blob/master/packages/animations/src/animation_metadata.ts 

https://github.com/angular/angular/commit/f1a9e3c (router)

 

angular 的动画建立在一堆的方法上:  

 

1. trigger

触发器, 用来和 dom 交互 <div [@triggerName]="state" ></div>
trigger 负责定义各种 state 和它们之间变化来变化去 transition

trigger('triggerA', [     state('A', style...),    state('B', style...),     transition('A => B', animate...),    transition('B => A', animate...)])

 

2. State

angular 的概念是通过改变状态(state)来触发(trigger)动画(animate)
每个状态都定义了最终的样式

state('A', style...)

 

3. transition

负责定义各种 state 之间错综复杂的转换关系

transition('A => B', animate...)transition('A <=> B', animate...)transition('* => *', animate...) * is whatevertransition(':enter', animate...)transition(':leave', animate...)transition('* => void', animate...) void表示无, whatever to null 也等于 :leavetransition((fromState, toState) => boolean, animate...) 还可以写方法判断哦 transition('A => B',[style,animate]) style 也可以放进来哦.transition('A => B',[animate,animate]) 数组 animate 会按序执行和 transition('A => B', sequence([animate,animate])) 是一样的transition('A => B',group(animate,animate)) 不想按序执行可以使用 group

 

到这里可以看出一个基本的流程

[@triggerName]="state" 监听了 state 的变化
一但变化发生触发器就查找匹配的 transition 然后执行 animate. 就这样简单

 

4. Style

就是定义 css 啦

style({ display : 'none' })

 

5. animate

具体的动画定义

animate("5s 10ms cubic-bezier(.17,.67,.88,.1)", style(...))

duration= 5second

delay=10ms
easing= cubic-bezier (ease-out 等等 css 有的都可以放)
最后加上 style 就可以动画了咯

animate("5s", keyframes([     style({opacity: 0, offset: 0}),    style({opacity: 1, offset: 0.3})]))

如果你想完全掌握节奏可以使用 keyframes + offset 做定义, offset 0.3 是百分比 

 

6.group

就是把多个 animate 组合起来并发执行.

group(animate,animate)

 

7.keyframes

上面说了

8.sequence
按顺序一个接一个执行, 和 group 刚好打对台, 一个 step by step, 另一个是并发

sequence(animate,animate)

 

 

9.useAnimation

animate是可以封装的. 使用 animation 方法

let fadeAnimation = animation([    style({ opacity: '{
{ start }}' }), animate('{
{ time }}', style({ opacity: '{
{ end }}'))], { params: { time: '1000ms', start: 0, end: 1 }});

 然后在任何想使用 animate 的地方改用 useAnimation

useAnimation(fadeAnimation, {    params: {      time: '2s',     start: 1,      end: 0    }})

 

 

10.query

任何你想使用 animate 的地方都可以使用 query
animate 会施法在当前的 element 上, 而通过 query 你可以施法在 element 的 child 上
query 支持 css 选择器的语法,还有一些 angular 特别的定义语法.

query('css-selector',[animate...])

- Querying for newly inserted/removed elements using `query(":enter")`/`query(":leave")`

这里有个神技 

{
{ item }}

通过 items.length 配上下面的 transition * => * + query child 就可以实现 items 在插入和移除时的动画了. 

transition('* => *', [      query(':leave', [        stagger(100, [         animate..        ])    ]),    query(':enter', [                stagger(100, [         animate..        ])    ])])

- Querying all currently animating elements using `query(":animating")`

- Querying elements that contain an animation trigger using `query("@triggerName")`
- Querying all elements that contain an animation triggers using `query("@*")`
- Including the current element into the animation sequence using `query(":self")`

 

11.stagger

stagger 是配合 query 来使用的, 它的作用是当 query select 出很多 element 时,你希望它们不要并发, 而是隔着一个间隔时间.

query('css-selector',[stagger(100,[animate])])

比如 select 出 2 个 element, 一个触发动画先,另一个则会等间隔 100ms 后才触发.

 

12.animateChild

animateChild 是一个 manual trigger 概念

one

angular 说, 当 parent trigger 触发后,child trigger by default 是不会被触发的 (不过我试了会 /.\)

而我们可以在 parent trigger 中通过 query('@child',[animateChild()]) 来手动触发 child trigger.
这个在做 router animate 时会用到哦.

 

router animation 实现 https://github.com/angular/angular/commit/f1a9e3c 

其实也是依据上面这些方法来做的. 主要用了 parent, child, query, enter, leave, animateChild 这些概念. 

 

转载于:https://www.cnblogs.com/keatkeat/p/7004439.html

你可能感兴趣的文章
三级联动---城市地区选择
查看>>
剖析 Laravel 计划任务--避免重复
查看>>
公司框架遇到的问题
查看>>
详解 Discuz 的 PHP经典加密解密函数 authcode
查看>>
Mysql XX 天之内
查看>>
Oracle如何删除表中重复记录
查看>>
nginx 是如何处理访问请求的
查看>>
wget参数用法详解
查看>>
【COCOS2D-X(1.X 2.X)】Json(cpp版)以及添加自定义字体库教程
查看>>
使用curl命令查看访问url的时间
查看>>
whois
查看>>
python添加环境变量
查看>>
Linux 新手容易犯的 7 个错误
查看>>
DP-01背包 (题)
查看>>
WinForm中跨线程操作控件
查看>>
CODING 敏捷实践完全指南
查看>>
unittest测试框架和测试报告的输出实例(一)
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>