animate
search
Search
span n>
首页
Blog
Code
Literature
More
language
animate
PHODAL
Home
Blog
Literature
《自己动手设计物联网》
《全栈应用开发:精益实践》
《前端架构:从入门到微前端》
查看标签 animate
Angular 动画的两种方式及添加购物车动画
作者:
Phodal Huang
in
杂谈
2018年6月20日 20:30
在前端应用中,动画是一个常见的场景。在使用了一系列的动画库之后,终于需要自己来实现一个动画了。这次的动画则是基于 Angular 框架。我的场景是一个类似于添加购物车的动画。在这个场景里,需要两个动画,一个是购物车数量的增加动画,一个则是折叠页面元素的动画。 在实现的过程上,我采用了两种不同的 Angular 动画的方式: - 使用 TypeScript 控制动画 - 使用 @Component 中的 animations Angular 动画基础 --- 如 Angular 官网中的示例那样,要在 Angular 应用中添加动画是比较简单的一件事——前提是我们懂得添加的法则。如下是官网的示例: ``` @Component({ selector: 'app-hero-list-basic', template: `
{{hero.name}}
`, styleUrls: ['./hero-list.component.css'], animations: [ trigger('heroState', [ state('inactive', style({ backgroundColor: '#eee', transform: 'scale(1)' })), state('active', style({ backgroundColor: '#cfd8dc', transform: 'scale(1.1)' })), transition('inactive => active', animate('100ms ease-in')), transition('active => inactive', animate('100ms ease-out')) ]) ] }) ``` 要使用动画,需要在模板中使用 ``[@heroState]``语法,这里的 ``heroState`` 对应着 ``@Component`` 中的 ``heroState`` 相关的动画。 - 在这个 ``trigger`` 中,我们定义了 ``inactive`` 和 ``active`` 两个不同的 ``state``。即当模板中的 ``hero.state`` 发生变化的时候,我们就会找到对应的 ``state`` 的样式等等的内容。 - 在这个 ``trigger`` 中,我们还定义了两个 ``transition``,即当我们的 ``state`` 从 ``inactive => active`` 或者 ``active => inactive`` 时,我们就会执行后面的动画。 原理上,大概就是这么多了。然后,我就开始了我的动画之旅。 购物车数量增加动画 --- 对于我的场景来说,要添加这个动画并不难。无非就是上一个值淡出,新的值淡入: ``` trigger('count', [ transition('void => current', [ animate( '400ms 150ms', keyframes([ style({ opacity: 0.6, transform: 'translateY(0)', offset: 0 }), style({ opacity: 0.3, transform: 'translateY(-15px)', offset: 0.5 }), style({ opacity: 0, transform: 'translateY(-30px)', offset: 1 }) ]) ) ]), transition('void => last', [ animate( 250, keyframes([ style({ opacity: 0, transform: 'translateY(100%)', offset: 0 }), style({ opacity: 0.3, transform: 'translateY(15px)', offset: 0.5 }), style({ opacity: 0.8, transform: 'translateY(0)', offset: 1.0 }) ]) ) ]) ]) ``` 代码就是这么简单,这里用到了关键帧 ``keyframes``,来进行一些简单的动画转换。 页面缩放动画 --- 随后,我需要做的就是对页面的元素进行缩放等效果,这个时候就需要用到 AnimationBuilder 来实现了: ``` const myAnimation = this.animationBuilder.build([ animate( 1000, keyframes([ style({ opacity: 0.8, transform: 'scale(0.8)', offset: 0.3 }), style({ opacity: 0.3, transform: 'scale(0.3)', offset: 0.5 }), style({ opacity: 0.2, transform: 'scale(0.2) translate(12000px, 8000px)', offset: 1 }) ]) ) ]); const player = myAnimation.create(forkFormComponent); player.play(); player.onDone(() => { const nativeElement = this.cartContainer.nativeElement; nativeElement.removeChild(nativeElement.childNodes[0]); this.renderer.setStyle(nativeElement, 'display', 'none'); }); ``` 在那之前,我先复制了页面元素: ``` const formElement = this.formElement.nativeElement; const forkFormComponent = this.cartContainer.nativeElement; forkFormComponent.appendChild(formElement.cloneNode(true)); this.renderer.setStyle(forkFormComponent, 'display', 'block'); this.renderer.setStyle(forkFormComponent, 'position', 'absolute'); this.renderer.setStyle(forkFormComponent, 'top', '-300px'); this.renderer.setStyle(forkFormComponent, 'left', '0'); ``` 这样一来,就能复制页面的 DOM,然后实现缩放效果了。
标签:
angular
animate
更多
arrow_forward
Feeds
RSS
/
Atom
最近文章
Agent 应该如何解决繁杂任务:从 /goal 到长时间运行
任务自适应 Harness:从 Trace 到多 Coding Agent 的协作记忆
从写清 Spec 到看懂功能:在 Session 历史中使用 Routa 重建需求全景
Routa 桌面版发布:内建 Harness 工程的 AI Coding 研发协作工作台
Harness Monitor:当多个 Agent 同时写代码时,如何看住质量
Gate First:为你的 Agent Team 构建 Harness 防御体系
/phodal-writer:我如何把十年写作经验整理成一个 Skill
从 Rule、Spec 到 Harness:AI Coding 的分阶段演进路径
Harness 工程可视化:在 Vibe Coding 中重建工程可控性
Harness Engineering Skill:使用 Entrix 技能开始你的代码熵治理
存档
▶
2026
(5 个月)
五月
(1)
四月
(8)
三月
(11)
二月
(4)
一月
(2)
▶
2025
(12 个月)
十二月
(5)
十一月
(7)
十月
(1)
九月
(2)
八月
(2)
七月
(2)
六月
(1)
五月
(7)
四月
(6)
三月
(6)
二月
(1)
一月
(2)
▶
2024
(12 个月)
十二月
(3)
十一月
(3)
十月
(3)
九月
(5)
八月
(4)
七月
(4)
六月
(1)
五月
(3)
四月
(2)
三月
(5)
二月
(2)
一月
(6)
▶
2023
(12 个月)
十二月
(6)
十一月
(4)
十月
(5)
九月
(4)
八月
(4)
七月
(5)
六月
(7)
五月
(4)
四月
(3)
三月
(9)
二月
(6)
一月
(2)
▶
2022
(12 个月)
十二月
(2)
十一月
(3)
十月
(3)
九月
(2)
八月
(5)
七月
(4)
六月
(3)
五月
(5)
四月
(1)
三月
(2)
二月
(3)
一月
(1)
▶
2021
(12 个月)
十二月
(6)
十一月
(5)
十月
(2)
九月
(4)
八月
(4)
七月
(2)
六月
(4)
五月
(4)
四月
(3)
三月
(4)
二月
(2)
一月
(3)
▶
2020
(12 个月)
十二月
(7)
十一月
(7)
十月
(6)
九月
(7)
八月
(9)
七月
(5)
六月
(5)
五月
(5)
四月
(8)
三月
(5)
二月
(5)
一月
(3)
▶
2019
(12 个月)
十二月
(6)
十一月
(4)
十月
(4)
九月
(5)
八月
(4)
七月
(10)
六月
(3)
五月
(6)
四月
(5)
三月
(7)
二月
(4)
一月
(3)
▶
2018
(12 个月)
十二月
(4)
十一月
(5)
十月
(4)
九月
(3)
八月
(5)
七月
(6)
六月
(3)
五月
(5)
四月
(4)
三月
(5)
二月
(2)
一月
(7)
▶
2017
(12 个月)
十二月
(21)
十一月
(19)
十月
(9)
九月
(4)
八月
(5)
七月
(4)
六月
(5)
五月
(4)
四月
(2)
三月
(3)
二月
(1)
一月
(1)
▶
2016
(12 个月)
十二月
(7)
十一月
(5)
十月
(1)
九月
(2)
八月
(2)
七月
(4)
六月
(4)
五月
(7)
四月
(3)
三月
(7)
二月
(8)
一月
(7)
▶
2015
(12 个月)
十二月
(10)
十一月
(10)
十月
(5)
九月
(10)
八月
(12)
七月
(4)
六月
(7)
五月
(6)
四月
(21)
三月
(9)
二月
(8)
一月
(25)
▶
2014
(12 个月)
十二月
(22)
十一月
(16)
十月
(15)
九月
(14)
八月
(30)
七月
(30)
六月
(12)
五月
(47)
四月
(49)
三月
(29)
二月
(12)
一月
(24)
▶
2013
(9 个月)
十二月
(29)
十一月
(9)
十月
(3)
七月
(4)
六月
(1)
五月
(3)
三月
(17)
二月
(13)
一月
(7)
▶
2012
(3 个月)
十二月
(8)
十一月
(3)
三月
(1)
▶
2011
(1 月)
十月
(1)
▶
2010
(1 月)
十二月
(1)
▶
1991
(1 月)
六月
(1)
展开全部
分类
mac os
(10)
Technology
(11)
Thoughtworks
(14)
Internet Of Things
(41)
Share
(26)
ThinkZone
(37)
Arduino
(9)
Hardware
(30)
Notes
(13)
Pythoner Learn Ruby
(5)
Think Of REWORK
(11)
Android
(27)
OpenSUSE
(6)
Linux
(20)
SEO
(9)
Quick Emacs
(6)
Full Stack
(131)
be-a-geek
(11)
Machine learning
(9)
microservices
(22)
Javascript
(55)
Mobile CMS
(11)
CoAP
(18)
Nodejs
(7)
AWS
(8)
杂谈
(100)
翻译
(7)
Build JavaScript FrameWork
(11)
DSL
(8)
Ionic
(13)
Geo
(7)
GIS
(5)
ReThink
(5)
Hybird
(6)
Architecture
(21)
APP
(11)
serverless
(24)
架构拾集
(7)
架构
(21)
AI
(122)
标签
opensuse
(10)
django
(41)
arduino
(10)
thoughtworks
(18)
centos
(9)
nginx
(18)
java
(10)
SEO
(9)
iot
(47)
iot system
(12)
RESTful
(23)
refactor
(17)
python
(47)
mezzanine
(15)
test
(11)
design
(16)
linux
(14)
tdd
(12)
ruby
(14)
github
(24)
git
(10)
javascript
(52)
android
(36)
jquery
(18)
rework
(13)
markdown
(10)
nodejs
(24)
google
(8)
code
(9)
macos
(9)
node
(11)
think
(8)
beageek
(8)
underscore
(14)
ux
(8)
microservices
(10)
rethink
(9)
architecture
(37)
backbone
(19)
mustache
(9)
requirejs
(11)
CoAP
(21)
aws
(10)
dsl
(9)
ionic
(25)
Cordova
(21)
angular
(16)
react
(14)
ddd
(9)
summary
(9)
growth
(10)
frontend
(14)
react native
(8)
serverless
(32)
rust
(9)
llm
(8)
作者
Phodal Huang
(1094)