Web animations & state:
The secrets for a successful relationship

@gilfink @opherv
AngularUP 2018
Every relationship starts somewhere









State
Animation



Hi! I'm @gilfink
👨💻 Senior consultant
Microsoft MVP
📚 Author
CEO @

Hi! I'm @OpherV

🖥️ developer
🎸 musician
🖌️ designer
👾 gamer
Creative Developer @
What is animation?
Frames over time

Frames over time






F( ) =


time
frame
Why use animation?
Because it's fun!

Animation is a tool to convey information
Sense of place
(where am I in the app)

Material Design | Choreography
https://material.io/design/motion/choreography.html#sequencing
Sense of action
(what just happened)

Meaningful Motion with Action-Driven Animation / Tobias Ahlin
http://tobiasahlin.com/blog/meaningful-motion-w-action-driven-animation/
Meaningful Motion with Action-Driven Animation / Tobias Ahlin
http://tobiasahlin.com/blog/meaningful-motion-w-action-driven-animation/
Meaningful Motion with Action-Driven Animation / Tobias Ahlin
http://tobiasahlin.com/blog/meaningful-motion-w-action-driven-animation/
Sense of state
(which behavior am I expecting next)


Material Design | Understanding motion
https://material.io/design/motion/understanding-motion.html#principles
Material Design | Understanding motion
https://material.io/design/motion/understanding-motion.html#principles
Sense of place
(where am I in the app)
Sense of action
(what just happened)
Sense of state
(which behavior am I expecting next)




What is state?
The current snapshot of the app's data
Handling app state is hard!

One component state changes

When State Goes Wrong...



Multiple component state changes


Unidirectional state changes to the rescue

Can we complicate that a little bit?


Redux
Flux




It's all comes down to
F(old state, action) = new state
Animation also relates to state

This is a list
animations: [
trigger('flyInOut', [
state('in', style({transform: 'translateX(0)'})),
transition('void => *', [
style({transform: 'translateX(-100%)'}),
animate(100)
]),
transition('* => void', [
animate(100, style({transform: 'translateX(100%)'}))
])
])
]
Angular list animation
with state changes

https://angular.io/guide/animations

https://angular.io/guide/animations
But animation isn't always so trivial...

Graphics editor selection dropdown / Shakuro Digital Agency
https://dribbble.com/shots/4371972-Graphics-Editor-Selection-Drop-Down
Graphics editor selection dropdown / Shakuro Digital Agency
https://dribbble.com/shots/4371972-Graphics-Editor-Selection-Drop-Down

User clicks on option:
option gets added to the state
option disappear animation



Squash animation + Rectangle appear animation
Label expand animation
What happens if a user clicks a few options rapidly?
User clicks on option 2
option 1 gets added to the state
option disappear animation starts
????
User clicks on option 1
option 2 gets added to the state


The problem:
F(time) = frame
F(old state, action) = new state
“Temporality temporalizes as a future which makes present in the process of having been”
- Martin Heidegger

"Why aren't you here yet"
- My wife

Animation Timelines

Story time
Solution 1:
Skipping
Animation 1
Animation 2
action
Pro: Animation is always updated relative to the state
Solution 1:
Skipping
Con: Jumping between states/animation looks jerky
Solution 2:
Queuing
Animation 1
Animation 2
action
Pro: Animations will always flow fluidly
Solution 2:
Queuing
Con: UI might not reflect the current state;
Animations play "catch-up" to the state
"Solution 3" :
Additive animation
Animation 1
Animation 2
action
http://ronnqvi.st/multiple-animations

Pro: Seamlessly joins two animations in a natural way
Solution 3:
Additive Animation
Con: Easy for single-element position-animation;
however most animation systems don't fit into this paradigm
2.5 solutions:
Skipping
Queuing
Additive animation
Which to pick?
It's all about
managing expectations


Angular implementation
Demo
https://bit.ly/2t0ZoP3
Let's wrap it up
The problem:
F(time) = frame
F(old state, action) = new state
Possible solutions:
Cut and skip animation
Queue animation
Additive animtion
Every relationship starts somewhere
You have to
manage expectations for it to work
Thank you!
@gilfink @OpherV
Web animations & state: The secrets for a successful relationship
By Opher Vishnia
Web animations & state: The secrets for a successful relationship
- 1,632