Practical Web Animation

A presentation at Pixel Pioneers in June 2019 in Bristol, UK by Lisi Linhart

Slide 1

Slide 1

Practical Web Animation Lisi Linhart

Slide 2

Slide 2

Lecturing @ LISILINHART.INFO Twitter @LISI_LINHART Blog

Slide 3

Slide 3

Slide 4

Slide 4

Slide 5

Slide 5

Slide 6

Slide 6

Title Text the user

Slide 7

Slide 7

Title Text the user the browser

Slide 8

Slide 8

easy attention supports devices feedback CSS vs. JS Animations user browser web standards decoration performance orientation render engines perceived performance hard

Slide 9

Slide 9

Animation with the Browser

Slide 10

Slide 10

4 things a browser can animate cheaply

Slide 11

Slide 11

4 things a browser can animate cheaply position translateX(-10px);

Slide 12

Slide 12

4 things a browser can animate cheaply position scale translateX(-10px); scale(0.5);

Slide 13

Slide 13

4 things a browser can animate cheaply position scale rotation translateX(-10px); scale(0.5); rotate(-25deg);

Slide 14

Slide 14

4 things a browser can animate cheaply position scale rotation opacity translateX(-10px); scale(0.5); rotate(-25deg); opacity: 0.5;

Slide 15

Slide 15

order matters transform properties can be chained

Slide 16

Slide 16

codepen.io/danwilson/pen/eEYdgo

Slide 17

Slide 17

this is not performant

Slide 18

Slide 18

use the transform property đź’Ş

Slide 19

Slide 19

Rendering & Property Changes Javascript / Event

Slide 20

Slide 20

Rendering & Property Changes Javascript / Event Style Recalculations width, margin, left, .. Layout

Slide 21

Slide 21

Rendering & Property Changes Javascript / Event Style Recalculations Layout Paint background, box-shadow, outline, ..

Slide 22

Slide 22

Rendering & Property Changes Javascript / Event Style Recalculations Layout Paint Composite transform, opacity ..

Slide 23

Slide 23

Rendering & Property Changes Javascript / Event Style Recalculations Layout 1 frame Paint Composite

Slide 24

Slide 24

translateX(-10px); opacity: 0.5; try to limit yourself to CSS transform & opacity for most animations

Slide 25

Slide 25

promote elements to new layers if animated often & constantly

Slide 26

Slide 26

Creating new layers

Slide 27

Slide 27

Creating new layers 1. will-change property 2. 3D Transform 3. animated 2D transforms 4. being on top of a compositing layers 5. animated CSS filters

Slide 28

Slide 28

Slide 29

Slide 29

🤯 don’t create too many layers remove them if the animation is finished

Slide 30

Slide 30

DevTools

Slide 31

Slide 31

inspect & test your animations in your devtools

Slide 32

Slide 32

Javascript / Event Style Recalculations Layout Paint Composite

Slide 33

Slide 33

lots of rendering, maybe we animated something that triggers Layout

Slide 34

Slide 34

Animation for the User

Slide 35

Slide 35

ORIENTATION & TRANSITIONS

Slide 36

Slide 36

Title Text

Slide 37

Slide 37

ORIENTATION & TRANSITIONS 1 help with reorientation in the user 2 explain relationships between different information spaces

Slide 38

Slide 38

ORIENTATION & TRANSITIONS Example: VueJs

Slide 39

Slide 39

Title Text codepen.io/lisilinhart/full/pmYBva

Slide 40

Slide 40

Slide 41

Slide 41

VueJS Transitions view is toggled when a button is clicked

Slide 42

Slide 42

VueJS Transitions view is toggled when a button is clicked

Slide 43

Slide 43

VueJS Transitions component is transitioned in if view is the correct value

Slide 44

Slide 44

VueJS Transitions

Slide 45

Slide 45

VueJS Transitions

Slide 46

Slide 46

VueJS Transitions define default state and the properties you want to transition

Slide 47

Slide 47

VueJS Transitions define how the element should animate when it’

Slide 48

Slide 48

VueJS Transitions define how the element should animate when it’s leaving

Slide 49

Slide 49

VueJS Transitions define different timing functions for entering and leaving

Slide 50

Slide 50

VueJS Transitions defines dynamic transitions depending on the state

Slide 51

Slide 51

VueJS Transitions the name of my transition is updated whenever view changes

Slide 52

Slide 52

Title Text codepen.io/lisilinhart/full/pmYBva

Slide 53

Slide 53

PERCEIVED PERFORMANCE

Slide 54

Slide 54

“Human perception of time is fluid, and can be manipulated in purposeful and productive ways.” Chris Harrison Faster Progress Bars: Manipulating Perceived Duration with Visual Augmentations

Slide 55

Slide 55

Chris Harrison, Zhiquan Yeo, Scott E. Hudson Faster Progress Bars: Manipulating Perceived Duration with Visual Augmentations animated progress bars reduced the perceived duration among the participants by 11%

Slide 56

Slide 56

PERCEIVED PERFORMANCE 0.1 seconds 1 second 5-10 seconds feels instantaneous user will feel the pause struggle to maintain the user’s attention Jakob Nielsen - Usability Engineering

Slide 57

Slide 57

PERCEIVED PERFORMANCE The page is loading activity & progress indication

Slide 58

Slide 58

PERCEIVED PERFORMANCE The page is loading activity & progress indication Here is a skeleton screen of what content is being loaded Lazy loading & hinting

Slide 59

Slide 59

PERCEIVED PERFORMANCE The page is loading activity & progress indication Here is a skeleton screen of what content is being loaded Lazy loading & hinting While you’re waiting, here is some more information on how the process works using idle times to inform the user

Slide 60

Slide 60

PERCEIVED PERFORMANCE Example: Web Animations API

Slide 61

Slide 61

WEB ANIMATIONS API keyframes object or array: stages of the animation timings object: how it’s animated (e.g. speed, delay, ..)

Slide 62

Slide 62

WAAPI KEYFRAMES keyframes object keyframes array

Slide 63

Slide 63

WAAPI TIMINGS OBJECT how fast should my animation run, how often should it run, what should happen after it’s finished?

Slide 64

Slide 64

CSS VS WAAPI CSS Animation

Slide 65

Slide 65

CSS VS WAAPI CSS Animation Waapi Animation

Slide 66

Slide 66

Title Text codepen.io/lisilinhart/full/PvgxEM

Slide 67

Slide 67

Slide 68

Slide 68

Slide 69

Slide 69

Slide 70

Slide 70

WAAPI EXAMPLE width & height of view box clip-path for text in order to animate transform: scaleX(0)

Slide 71

Slide 71

WAAPI EXAMPLE text with applied clip-path

Slide 72

Slide 72

WAAPI EXAMPLE getting the elements

Slide 73

Slide 73

WAAPI EXAMPLE getting the elements defining some custom easing

Slide 74

Slide 74

WAAPI EXAMPLE getting the elements defining some custom easing defining timings object

Slide 75

Slide 75

WAAPI EXAMPLE calling the animations

Slide 76

Slide 76

WAAPI EXAMPLE all animated properties need to be in every keyframe different easing on last keyframe the animation for the needle starts at 50%

Slide 77

Slide 77

Title Text codepen.io/lisilinhart/full/PvgxEM

Slide 78

Slide 78

WAAPI CONTROLS .animate() returns an animation object speeding up the animations when we click the body

Slide 79

Slide 79

Title Text codepen.io/lisilinhart/full/PvgxEM codepen.io/lisilinhart/pen/rqgPNd

Slide 80

Slide 80

WAAPI CONTROLS

Slide 81

Slide 81

WAAPI CALLBACKS

Slide 82

Slide 82

WAAPI ACCESSIBILITY CSS Variables

Slide 83

Slide 83

WAAPI ACCESSIBILITY cancelling animations in Javascript

Slide 84

Slide 84

WHY THE WEB ANIMATIONS API? • • • API provided by the browser • • choreographed & chained animations no extra Javascript code like for libraries can render animations over the compositor thread (no JS stalling) a native & more powerful alternative to CSS animations

Slide 85

Slide 85

Slide 86

Slide 86

ATTENTION & FEEDBACK

Slide 87

Slide 87

FEEDBACK “Feedback indicates causation between two or more events, often used to connect a user’s interaction with the interface’s reaction” Rachel Nabors - Animation at Work

Slide 88

Slide 88

FEEDBACK I recognised that you clicked this button giving a reaction to user input

Slide 89

Slide 89

FEEDBACK I recognised that you clicked this button giving a reaction to user input You entered some information, but it’s not correct cause & effect of the users input

Slide 90

Slide 90

FEEDBACK I recognised that you clicked this button giving a reaction to user input You entered some information, but it’s not correct cause & effect of the users input You submitted the form, but our system is still processing it making system activity visible

Slide 91

Slide 91

codepen.io/davidkpiano/full/WKvPBP/

Slide 92

Slide 92

ATTENTION

Slide 93

Slide 93

ATTENTION To get to the next step, click this prominent item showing possible actions

Slide 94

Slide 94

ATTENTION To get to the next step, click this prominent item showing possible actions We created this explanatory animation in order for you to better understand our process teaching the user about a process, storytelling

Slide 95

Slide 95

ATTENTION To get to the next step, click this prominent item showing possible actions We created this explanatory animation in order for you to better understand our process teaching the user about a process, storytelling You had to read a lot of information, so we added this kitten animation to entertain you adding fun and reinforcing branding

Slide 96

Slide 96

Title Text stripe.com/us/payments

Slide 97

Slide 97

ATTENTION & FEEDBACK Reactive Animation

Slide 98

Slide 98

“A reactive animation is one involving discrete changes, due to events.” Conal Elliott

Slide 99

Slide 99

read here

Slide 100

Slide 100

JS + CSS VARIABLES setting a CSS Variable via JS

Slide 101

Slide 101

JS + CSS VARIABLES using the set variables in your CSS

Slide 102

Slide 102

JS + CSS VARIABLES CSS Variables are inherited from their parent, for better performance set them at the most specific level

Slide 103

Slide 103

Title Text pixelpioneers.co

Slide 104

Slide 104

Title Text codepen.io/lisilinhart/full/oROmWB

Slide 105

Slide 105

Slide 106

Slide 106

Slide 107

Slide 107

Slide 108

Slide 108

JS + CSS VARIABLES define variables for changes and requestAnimationFrame

Slide 109

Slide 109

JS + CSS VARIABLES define EventListener and calculate X & Y from event values that are pixels

Slide 110

Slide 110

JS + CSS VARIABLES values need to be between 1 and -1 for easier usage with CSS calc()

Slide 111

Slide 111

JS + CSS VARIABLES update DOM inside requestAnimationFrame

Slide 112

Slide 112

JS + CSS VARIABLES set CSS Variables and reset requestAnimationFrame when done

Slide 113

Slide 113

JS + CSS VARIABLES rotate panel according to the variables

Slide 114

Slide 114

JS + CSS VARIABLES transition the transform so the card gets animated smoothly

Slide 115

Slide 115

MATRIX 3D ????

Slide 116

Slide 116

meyerweb.com/eric/tools/matrix/

Slide 117

Slide 117

MATRIX 3D The matrix3d() function is an alternative to the three dimensional transform functions rotate3d(), rotateX(), rotateY(), rotateZ(), translate3d(), translateZ(), scale3d(), scaleZ(), and perspective().

Slide 118

Slide 118

MATRIX 3D doesn’t need perspective on parent needs perspective on parent

Slide 119

Slide 119

MATRIX 3D doesn’t need perspective on parent without perspective

Slide 120

Slide 120

JS + CSS VARIABLES difference in translation creates a 3D parallax effect

Slide 121

Slide 121

JS + CSS VARIABLES higher values look like they’re closer

Slide 122

Slide 122

Title Text codepen.io/lisilinhart/full/oROmWB

Slide 123

Slide 123

JS + CSS VARIABLES • easily debuggable • no excessive DOM manipulation • DOM node independent • great if you animate multiple child elements • great for reactive & physics animation • Transform: Individual Properties

Slide 124

Slide 124

Timing Animation Principles Easing

Slide 125

Slide 125

TIMING valhead.com/2016/05/05/how-fast-should-your-ui-animations-be

Slide 126

Slide 126

TIMING slow transitions are less distracting fast animations are more likely to attract attention valhead.com/2016/05/05/how-fast-should-your-ui-animations-be/

Slide 127

Slide 127

EASINGS.NET

Slide 128

Slide 128

EASINGS.NET

Slide 129

Slide 129

Slide 130

Slide 130

EASING easeOut feels more reactive and instantaneous

Slide 131

Slide 131

EASING easeOut feels more reactive and instantaneous needs more time, because it’s a more complex curve

Slide 132

Slide 132

EASING when an element is moving into the screen it should start quick and slow down towards the center

Slide 133

Slide 133

EASING when an element is moving out of the screen it should start slow and speed up towards the end

Slide 134

Slide 134

Opportunities for Animation

Slide 135

Slide 135

make idle time more useful and interesting Opportunities for Animation

Slide 136

Slide 136

make idle time more useful and interesting guide the user in a process Opportunities for Animation

Slide 137

Slide 137

make idle time more useful and interesting guide the user in a process Opportunities for Animation explain relationships in the information space

Slide 138

Slide 138

make idle time more useful and interesting guide the user in a process Opportunities for Animation get the users attention explain relationships in the information space

Slide 139

Slide 139

Animation Resources

Slide 140

Slide 140

Animation Resources Animation At Work - A Book Apart Book by Rachel Nabors

Slide 141

Slide 141

Animation Resources Animation At Work - A Book Apart Twitch Channel by David Khourshid & Stephen Shaw keyframe.rs Book by Rachel Nabors

Slide 142

Slide 142

Animation Resources Animation At Work - A Book Apart Twitch Channel by David Khourshid & Stephen Shaw keyframe.rs Book by Rachel Nabors animationatwork.slack.com Slack Channel to get feedback & inspiration

Slide 143

Slide 143

Animation Resources Animation At Work - A Book Apart Twitch Channel by David Khourshid & Stephen Shaw basics to know about animation keyframe.rs Book by Rachel Nabors animationatwork.slack.com developers.google.com/web/ fundamentals/design-and-ux/animations/ Slack Channel to get feedback & inspiration

Slide 144

Slide 144

Animation Resources Animation At Work - A Book Apart Twitch Channel by David Khourshid & Stephen Shaw basics to know about animation keyframe.rs Book by Rachel Nabors animationatwork.slack.com developers.google.com/web/ fundamentals/design-and-ux/animations/ Slack Channel to get feedback & inspiration uianimationnewsletter.com inspiration for UI animation

Slide 145

Slide 145

“Users should only notice your animation if you need to attract their attention in that moment. Otherwise, micro-interactions and other transitions should be so seamless, users don’t even notice that there is animation” Heather Daggett - Animation At Work

Slide 146

Slide 146

Animate for the user, don’t create obstacles,