SVG c an do THAT?! SVG c an do THAT?! S ar ah
Dr a sn e r S ar ah
Dr a sn e r : t w i t t e r | |
: c o d e pe n @ s a r a h _ e d o @ s d r a s
A presentation at FullStack Fest in September 2017 in Barcelona, Spain by Sarah Drasner
 
                SVG c an do THAT?! SVG c an do THAT?! S ar ah
Dr a sn e r S ar ah
Dr a sn e r : t w i t t e r | |
: c o d e pe n @ s a r a h _ e d o @ s d r a s
 
                S a r a h Dr a s n e r S a r a h Dr a s n e r Sr . De v eloper Adv ocate at Microsoft
 
                SVG! SVG! This pen I made
 
                SVG! SVG! Crisp on an y displa y L ess HTTP requests to handle Easily scalable for responsiv e Small filesize if y ou design for performance Easy to animate Easy to mak e accessible F un!
 
                This . pen
 
                SVG! SVG!
 
                 
                Positioning in CSS got y ou down? Positioning in CSS got y ou down?
 
                b y This pen Chris Co yier
 
                We c an do st uf f We c an do st uf f , All , All f ully re sponsive f ully re sponsive in in e very direction e very direction like this like this
 
                made with Sar a Soueidan 's This pen circulus . SV G can mean conserving space in y our UI until icons are needed
 
                I t
d o e s n ' t
n e c c e s s a r i l y
h a v e
t o
b e
f u l l y I t
d o e s n ' t
n e c c e s s a r i l y
h a v e
t o
b e
f u l l y f l u i d ,
e i t h e r .
L e t ' s
I m pl e m e n t
s o m e f l u i d ,
e i t h e r .
L e t ' s
I m pl e m e n t
s o m e R e s po n s i v e
D e s i g n R e s po n s i v e
D e s i g n . .
 
                Like legos . Like legos .
 
                This . pen
 
                / / v a r i a b l e
d e c l a r a t i o n
f o r
t h e
g l o b a l
r e p e a t e d
a n i m a t i o n c o n s t
g e a r
=
$ ( "
g e a r 1 ,
g e a r 2 ,
g e a r 3 " ) ;
. . .
/ / a n i m a t i o n
t h a t ' s
r e p e a t e d
f o r
a l l
o f
t h e
s e c t i o n s
f u n c t i o n
r e v o l v e ( )
{
l e t
t l
=
n e w
T i m e l i n e M a x ( ) ;
t l . a d d ( " b e g i n " ) ;
t l . t o ( g e a r ,
4 ,
{
t r a n s f o r m O r i g i n :
" 5 0 %
5 0 % " ,
r o t a t i o n :
3 6 0 ,
e a s e :
L i n e a r . e a s e N o n e
} ,
" b e g i n " ) ;
. . .
r e t u r n
t l ;
}
c o n s t
r e p e a t
=
n e w
1 } ) ;
r e p e a t . a d d ( r e v o l v e ( ) ) ;
 
                f u n c t i o n
p a i n t P a n d a ( )
{
l e t
t l
=
n e w
T i m e l i n e M a x ( ) ;
t l . t o ( l h ,
1 ,
{
s c a l e Y :
1 . 2 ,
r o t a t i o n :
5 ,
t r a n s f o r m O r i g i n :
" 5 0 %
0 " ,
e a s e :
C i r c . e a s e O u t
} ,
1 " ) ;
. . .
r e t u r n
t l ;
}
/ / c r e a t e
a
t i m e l i n e
b u t
i n i t i a l l y
p a u s e
i t
s o
t h a t
w e
c a n
c o n t r o l
i t
v i a
c l c o n s t
t r i g g e r P a i n t
=
n e w
T i m e l i n e M a x ( {
p a u s e d :
t r u e
} ) ;
t r i g g e r P a i n t . a d d ( p a i n t P a n d a ( ) ) ;
/ / t h i s
b u t t o n
k i c k s
o f f
t h e
p a n d a
p a i n t i n g
t i m e l i n e
b u t t o n . a d d E v e n t L i s t e n e r ( " c l i c k " ,
f u n c t i o n ( )
{
t r i g g e r P a i n t . r e s t a r t ( ) ;
} ) ;
. . .
 
                We c an use this st a bility for We c an use this st a bility for P age Tr ansitions P age Tr ansitions
 
                In React
 
                t o g g l e S h a p e ( )
{
i f
( t h i s . s t a t e . s c r e e n
=
0 )
{
t h i s . a n i m F i r e ( t h i s . s t a t e . s p l i t T e x t )
}
. . .
t h i s . s e t S t a t e ( {
s c r e e n :
( t h i s . s t a t e . s c r e e n
1 )
%
3
} )
}
 
                a n i m F i r e ( s p l i t T e x t )
{
c o n s t
t l
=
n e w
T i m e l i n e M a x ,
s t A
=
' s t a r t ' ;
T w e e n M a x . s e t ( [ t h i s . g 1 . c h i l d N o d e s ,
t h i s . g 2 . c h i l d N o d e s ] ,
{
c l e a r P r o p s : ' s v g O r i g i n '
} )
t l . a d d ( ' s t a r t ' )
t l . s t a g g e r F r o m T o ( t h i s . g 1 . c h i l d N o d e s ,
d u r ,
{
d r a w S V G :
' 6 8 %
1 0 0 % '
} ,
{
d r a w S V G :
' 2 7 . 7 5 %
0 % ' ,
e a s e :
B a c k . e a s e O u t
} ,
s t D ,
s t A )
. . .
}
 
                In V ue.js with Nuxt
 
                Repo: https:/ / github.com/ sdr as/ nuxt-type Demo: https:/ / nuxt-type.now .sh/
 
                JS Hook s JS Hook s e x p o r t
d e f a u l t
{
t r a n s i t i o n :
{
m o d e :
i n ' ,
c s s :
f a l s e ,
e n t e r
( e l ,
d o n e )
{
l e t
t l
=
n e w
T i m e l i n e M a x ( {
o n C o m p l e t e :
d o n e
} ) ,
s p t
=
n e w
S p l i t T e x t ( ' h 1 ' ,
{ t y p e :
' c h a r s '
} ) ,
c h a r s
=
s p t . c h a r s ;
T w e e n M a x . s e t ( c h a r s ,
{
t r a n s f o r m P e r s p e c t i v e :
6 0 0 ,
p e r s p e c t i v e :
3 0 0 ,
t r a n s f o r m S t y l e :
3 d '
} )
t l . a d d ( ' s t a r t ' )
t l . f r o m ( e l ,
0 . 8 ,
{
s c a l e :
0 . 9 ,
t r a n s f o r m O r i g i n :
' 5 0 %
5 0 % ' ,
e a s e :
S i n e . e a s e O u t
} ,
' s t a r t ' )
. . .
t l . t i m e S c a l e ( 1 . 5 )
}
. . .
 
                F rom Codrops P osition: fix ed and morphed into pathdata:id
 
                This b y pen Sullivan Nolan
 
                Use it FOR the la y out preserveAspectRatio="none"
 
                SVG c an be TINY SVG c an be TINY
 
                HTTP Archiv e
 
                 
                /
S V G O M G P e t e r C o l l i n g ri d g e ' s
S V G
G U I Be f o r e
w e
ge t
st ar t e d : Be f o r e
w e
ge t
st ar t e d : Opt i mi z e ! Opt i mi z e ! High P erformance SV Gs
 
                Dr agg a ble for Dr agg a ble for Re sponsive Re sponsive
 
                Th at whole SVG is 2KB! Th at whole SVG is 2KB!
 
                Wh at's h appening? Wh at's h appening?
 
                What the DOM actually sees
 
                Entire file size: 6KB! Entire file size: 6KB! Lo ader s! Lo ader s!
 
                SV G
c an
mak e
OT H ER
i mage s smal l e r ! SV G
c an
mak e
OT H ER
i mage s smal l e r ! By (go follow him) Sha w 38k b => 16k b! 38k b => 16k b!
 
                Ma k e
a
R e s pon s i v e
S VG Ma k e
a
R e s pon s i v e
S VG A n im a t ion
S pr i t e A n im a t ion
S pr i t e
 
                V i e w bo x
S h i f t
w i t h
a
S pr i t e V i e w bo x
S h i f t
w i t h
a
S pr i t e This . pen
 
                Vie wBox Shift with Ja v aScript Vie wBox Shift with Ja v aScript v a r
s h a p e
=
d o c u m e n t . g e t E l e m e n t B y I d ( " s h a p e " ) ;
/ /
m e d i a
q u e r y
e v e n t
h a n d l e r
i f
( m a t c h M e d i a )
{
v a r
m q
=
w i d t h :
5 0 0 p x ) " ) ;
m q . a d d L i s t e n e r ( W i d t h C h a n g e ) ;
W i d t h C h a n g e ( m q ) ;
}
/ /
m e d i a
q u e r y
c h a n g e
f u n c t i o n
W i d t h C h a n g e ( m q )
{
i f
( m q . m a t c h e s )
{
s h a p e . s e t A t t r i b u t e ( " v i e w B o x " ,
" 0
0
4 9 0
4 7 4 " ) ;
}
e l s e
{
s h a p e . s e t A t t r i b u t e ( " v i e w B o x " ,
" 0
4 9 0
5 0 0
5 0 0 " ) ;
}
} ; Acts lik e a window to show and hide the requisite parts of the sprite
 
                Compare to using te xt with photos to illustr ate an article. 8KB 8KB Gzipped. Gzipped. Th at Whole Animation Th at Whole Animation and SVG w a s and SVG w a s
 
                SVG c an be acce s sible SVG c an be acce s sible
 
                Title and associativ e aria tags: < s v g
" t i t l e "
" s v g "
" p r e s e n t a t i o n "
" h t t p : / / w w w . w 3 . o r g / 2 0 0 0 / s v g "
" 0
0
7 6 5
5 8 7 "
< t i t l e
" t i t l e "
" e n "
I c o n s
t h a t
i l l u s t r a t e
G l o b a l
W a r m i n g
S o l u t i o n s
< / t i t l e
T i t l e fo r e l e m e n t s i n t h e SV G D O M R o l e t o l e t t h e s c re e n re a d e r k n o w w h e t h e r t o t r a v e rs e , w i t h s u ppo rt c h a rt s . b y H e a t h e r M i g l i o r i s i . T h i s re s o u rc e T h i s a rt i c l e
 
                SVG
c an b e
s t y l e d
l i k e
t e x t SVG
c an b e
s t y l e d
l i k e
t e x t
 
                < s v g
" i c o n "
" 2 4 "
" 1 4 "
" M e n u "
< u s e
" / s v g / s p r i t e s . s v g
h a m b u r g e r "
< / u s e
< / s v g
t h e
s v g
< ? x m l
" 1 . 0 "
8 " ?
< ! D O C T Y P E
s v g
P U B L I C
/ / W 3 C / / D T < s v g
" h t t p : / / w w w . w 3 . o r g / 2 0 0 0 / s v g "
" h t t p : / / w w w . w 3 . o r g
< s y m b o l
h a m b u r g e r "
" 0
0
2 4
1 4 "
< g
"
F F F "
" e v e n o d d "
I
g u e s s
t h i s
i s
t h e
p a r t
I
n e e d
t o
s t y l e . .
B u t
I
h a v e
t r i e d
e v e r y t h i n g . .
l i t e r a l l y ,
I
t r i e d
s t y l i n g
{ f i l l :
r e d }
< p a t h
" M 0
0 h 2 4 v 2 H 0 z M 0
6 h 2 4 v 2 H 0 z M 6
1 2 h 1 8 v 2 H 6 z " /
< / g
< / s y m b o l
< / s v g
The original que stion code The original que stion code
 
                The secret: fill needs to be currentColor
 
                SVG c an BOUNCE SVG c an BOUNCE
 
                This . pen
 
                d a t a ( )
{
r e t u r n
{
t o t a l :
2 0 0 ,
r a d i u s :
1 5 ,
}
} ,
m e t h o d s :
{
i n c r e m e n t H e i g h t ( )
{
t h i s . t o t a l
=
1 0 0
} ,
i n c r e m e n t R a d i u s ( )
{
t h i s . r a d i u s
=
1
} ,
b o u n c e B a l l ( )
{
t h i s . v y
=
t h i s . g ;
/ /
g r a v i t y
i n c r e a s e s
t h e
v e r t i c a l
s p e e d
t h i s . x 1
=
t h i s . v x ;
/ /
h o r i z o n t a l
s p e e d
i n c c r e m e n t s
h o r i z o n t a l
p o s i t i o n
t h i s . y 1
=
t h i s . v y ;
/ /
v e r t i c a l
s p e e d
i n c r e a s e s
v e r t i c a l
p o s i t i o n
i f
( t h i s . y 1
t h i s . t o t a l
t h i s . r a d i u s )
{
/ /
i f
b a l l
h i t s
t h e
g r o u n d
t h i s . y 1
=
t h i s . t o t a l
t h i s . r a d i u s ;
/ /
r e p o s i t i o n
i t
a t
t h e
g r o u n d
t h i s . v y
=
0 . 8 ;
/ /
t h e n
r e v e r s e
a n d
r e d u c e
i t s
s p e e d
}
} ,
. . . V ue.js
 
                a n i m a t e B a l l ( )
{
/ / u s e
r A F
t o
a n i m a t e
b u t
p u t
a
b o u n d a r y
o n
i t
s o
i t
d o e s n ' t
r u n
f o r e v e r
l e t
s t a r t ,
v u e T h i s
=
t h i s ;
t h i s . r u n n i n g
=
t r u e ;
f u n c t i o n
s t e p ( t i m e s t a m p )
{
i f
( ! s t a r t )
s t a r t
=
t i m e s t a m p ;
v a r
p r o g r e s s
=
t i m e s t a m p
s t a r t ;
i f
( p r o g r e s s
<
1 3 0 0 0 )
{
v u e T h i s . b o u n c e B a l l ( ) ;
v u e T h i s . r e q
=
w i n d o w . r e q u e s t A n i m a t i o n F r a m e ( s t e p ) ;
}
e l s e
{
v u e T h i s . x 1
=
t h i s . r a d i u s ;
v u e T h i s . y 1
=
t h i s . r a d i u s ;
v u e T h i s . r u n n i n g
=
f a l s e ;
}
}
t h i s . r e q
=
w i n d o w . r e q u e s t A n i m a t i o n F r a m e ( s t e p ) ;
} , < b u t t o n
" a n i m a t e B a l l "
" ! r u n n i n g "
S t a r t < / b u t t o n
 
                b y This pen Tiffan y Ra yside
 
                SVG c an SNAP SVG c an SNAP
 
                E S 6 Templa t e E S 6 Templa t e Liter a l s Liter a l s
 
                Pre v i o u s l y :
S t r i n g
C o n c a t e n a t i o n Pre v i o u s l y :
S t r i n g
C o n c a t e n a t i o n v a r
s t r i n g i e
=
" H i ,
I
o r d e r e d
"
n u m 1
"
"
p r o d u c t 1
" s
a n d
"
n u m 2
"
"
p r o d u c t 2
" s . " ; Hi, I ordered 5 apples and 2 or anges. c o n s t
s t r i n g i e
=
` H i ,
I
o r d e r e d
$ { n u m 1 }
$ { p r o d u c t 1 } s
a n d
$ { n u m 2 }
$ { p r o d u c t 2 } s . ` ;
 
                This b y pen Anthon y Dugois
 
                 
                M two points x, y Q two points for the bezier handle x, y , two points x, y
 
                f u n c t i o n
p l o t t e r ( p o i n t s ,
s t a r t X )
{
v a r
p a t h A r r
=
[ ] ,
p a t h p o i n t s
=
[ ] ;
f o r
( i
=
0 ;
i
i n c ;
i + + )
{
p a t h p o i n t s . p u s h ( p o i n t s
( ( i
( p o i n t s * 2 ) )
p o i n t s ) ) ;
p a t h A r r . p u s h ( `
$ { s t a r t X }
$ { p a t h p o i n t s [ i ] } ` ) ;
}
r e t u r n
p a t h A r r ;
}
r o p e 1 . s e t A t t r i b u t e ( " d " ,
` M
$ { p l o t t e r ( 5 0 ,
s t a r t 1 ) } ` . j o i n ( "
L " )
) ; Plot the point s Plot the point s M
x c o o rd
y c o o rd
L
x c o o rd
y c o o rd
 
                 
                SVG c an Distort SVG c an Distort
 
                D i s t o r t i o n
F i l t e r s D i s t o r t i o n
F i l t e r s codrops buttons < f i l t e r
" t u r b "
< f e T u r b u l e n c e
" t u r b w a v e "
" f r a c t a l N o i s e "
" 0 "
" 2 "
" t u r b u l e n c e _ 3 "
" 3 "
/
< f e D i s p l a c e m e n t M a p
" R "
" G "
" S o u r c e G r a p h i c "
" t u r b u l e n c e _ 3 "
" 4 0 "
/
< / f i l t e r
 
                f u n c t i o n
a d d F i l t e r ( )
{
v a r
a l l
=
d o c u m e n t . g e t E l e m e n t B y I d ( " a l l " ) ;
a l l . s e t A t t r i b u t e ( " f i l t e r " ,
" u r l (
t u r b ) " ) ;
} ;
( f u n c t i o n
a d d F i l t e r T i m e d ( )
{
w i n d o w . s e t T i m e o u t ( a d d F i l t e r ,
5 0 0 0 ) ;
} ( ) ) ; Set the filter on a timer Set the filter on a timer
 
                P ool
 
                 
                l e t
t u r b
=
d o c u m e n t . q u e r y S e l e c t o r A l l ( '
2
f e I m a g e ' ) [ 0 ] ,
f e D
=
d o c u m e n t . q u e r y S e l e c t o r A l l ( '
2
f e D i s p l a c e m e n t M a p ' ) [ 0 ] ;
f u n c t i o n
s c e n e O n e ( )
{
v a r
t l
=
n e w
T i m e l i n e M a x ( ) ;
t l . a d d ( ' b e g i n ' ) ;
. . .
t l . f r o m T o ( f e D ,
8 ,
{
a t t r :
{
s c a l e :
3 0
}
} ,
{
a t t r :
{
s c a l e :
0 ,
t r a n s f o r m O r i g i n :
' 5 0 %
5 0 % '
}
} ,
0 . 4 ' ) ;
} Animate the filter Animate the filter
 
                This . pen
 
                 
                 
                This b y (go follow him!) pen Lucas Bebber
 
                M o r p h S V G P l u g i n . c o n v e r t T o P a t h ( " e l l i p s e " ) ;
f u n c t i o n
f l a m e ( )
{
v a r
t l
=
n e w
T i m e l i n e M a x ( ) ;
t l . a d d ( " b e g i n " ) ;
t l . f r o m T o ( b l u r N o d e ,
2 . 5 ,
{
a t t r :
{
s t d D e v i a t i o n :
9
}
} ,
{
a t t r :
{
s t d D e v i a t i o n :
3
}
} ,
" b e g i n " ) ;
v a r
n u m
=
9 ;
f o r
( v a r
i
=
1 ;
i
n u m ;
i + + )
{
t l . t o ( f S t a b l e ,
1 ,
{
m o r p h S V G :
{
s h a p e :
"
f "
i
} ,
o p a c i t y :
( ( M a t h . r a n d o m ( )
0 . 7 )
0 . 7 ) ,
e a s e :
L i n e a r . e a s e N o n e
} ,
"
i ) ;
}
 
                This . pen
 
                SVG c an do on-the-fly SVG c an do on-the-fly logo adjustment logo adjustment
 
                , b y (y ou should go follow her , and the project) Ma v o L ea V erou
 
                SVG c an incre a se KPIs SVG c an incre a se KPIs
 
                Re visiting old appro ache s Re visiting old appro ache s Re sponsive animated Infogr aphic Re sponsive animated Infogr aphic article Rethinking Information Presentation
 
                C o n v e r si o n C o n v e r si o n ( one source e xample, ) The Whole Br ain Group i n c re a s e d
t r a ffic
t o
t h e i r w e b s i t e
b y
o v e r 4 0 0 % l e a d
i n c re a s e
b y
a l m o s t 4 5 0 0 % t h e
n u m b e r o f
n e w
v i s i t o rs
t o
t h e i r s i t e
t o
a l m o s t 7 8 %
 
                Problems Problems Not responsiv e- tipping point: Not updated to current conte xt ^ Especially design Tim Kadlec Al l
po st s o l d e r
t h an
Al l
po st s o l d e r
t h an
2
y e a r s . 2
y e a r s . W h at
H appened? W h at
H appened?
 
                This pen.
 
                Change the viewbo x in Ja vaScript lik e we did before: Re sponsive: Re sponsive:
 
                Re sponsive: Re sponsive: / *
m e d i a
q u e r y
e x a m p l e
e l e m e n t ,
m o b i l e
f i r s t
/
@ m e d i a
w i d t h :
8 2 5 p x )
{
c o n t a i n e r
{
w i d t h :
1 0 0 % ;
}
}
@ m e d i a
w i d t h :
8 2 6 p x )
{
. c o n t a i n e r
{
w i d t h :
8 2 5 p x ;
}
} Y ou already know this!
 
                SVG c an dr a w it self SVG c an dr a w it self
 
                The dash 's offset is an animatable property!
 
                This pen
 
                This b y (go follow him!) pen Chris Gannon
 
                You c an inter act with an SVG You c an inter act with an SVG
 
                Inter action
 
                v a r
r a d i u s
=
b a l l o o n . g e t A t t r i b u t e ( " r " ) ;
v a r
c y S e t
=
b a l l o o n . g e t A t t r i b u t e ( " c y " ) ;
b a l l o o n . s e t A t t r i b u t e ( ' r ' ,
p a r s e I n t ( r a d i u s )
1 0 ) ;
b a l l o o n . s e t A t t r i b u t e ( ' c y ' ,
p a r s e I n t ( c y S e t )
1 0 ) ;
i f
( p a r s e I n t ( r a d i u s )
1 2 5 )
{
p o p 3 " ) ;
v a r
b a l l o o n T l
=
n e w
T i m e l i n e M a x ( ) ;
b a l l o o n T l . a d d ( " p o p " ) ;
b a l l o o n T l . t o ( "
b a l l o o n " ,
0 . 0 5 ,
{
s c a l e :
5 ,
o p a c i t y :
0 ,
t r a n s f o r m O r i g i n :
" 5 0 %
5 0 % " ,
e a s e :
C i r c . e a s e O u t
} ,
" p o p " ) ;
. . .
s e t T i m e o u t ( f u n c t i o n ( ) {
b a l l o o n . s e t A t t r i b u t e ( " r " ,
" 4 5 " ) ;
b a l l o o n . s e t A t t r i b u t e ( " c y " ,
" 2 3 3 . 5 " ) ;
} ,
2 0 0 ) ;
}
 
                 
                c r e a t e B i g C i r c l e s ( )
{
c o n s t
s v g N S
=
t h i s . $ r e f s . f i g u r e . n a m e s p a c e U R I ;
t h i s . $ r e f s . p a t t e r n g r o u p . i n n e r H T M L
=
' ' ;
f o r
( l e t
i
=
0 ;
i
<
t h i s . n u m L i n e s / 2 ;
i + + )
{
l e t
c i r c
=
d o c u m e n t . c r e a t e E l e m e n t N S ( s v g N S ,
' c i r c l e ' ) ;
t h i s . a p p e n d ( t h i s . $ r e f s . p a t t e r n g r o u p ,
c i r c ) ;
t h i s . s e t A t t r i b u t e s ( c i r c ,
{
' c x ' :
t h i s . s i z e / 2 ,
' c y ' :
t h i s . s i z e / 2 ,
' r ' :
t h i s . t o t e s R a n d o ( t h i s . s i z e / 2 ,
0 ) ,
' f i l l ' :
' n o n e ' ,
' s t r o k e ' :
t h i s . g r a d i e n t s 2 [ t h i s . t o t e s R a n d o ( 1 ,
0 ) ] ,
w i d t h ' :
1
} ) ;
}
} , < d i v
" f o r m a r e a "
< h 3
C r e a t e
C i r c l e s : < / h 3
< b u t t o n
" c r e a t e S m C i r c l e s "
M a k e
s m a l l
c i r c l e s < / b u t t o n
< b u t t o n
" c r e a t e B i g C i r c l e s "
M a k e
b i g
c i r c l e s < / b u t t o n
< / d i v
 
                a n i m a t i o n ( )
{
l e t
t l
=
n e w
T i m e l i n e M a x ( )
t l . a d d ( ' b e g i n ' )
t l . t o ( ' l i n e ' ,
2 ,
{
r o t a t i o n :
3 6 0 ,
r e p e a t :
1 ,
t r a n s f o r m O r i g i n :
' 5 0 %
5 0 % ' ,
e a s e :
S i n e . e a s e O u t
} ,
' b e g i n ' )
. . .
r e t u r n
t l ;
} ,
p a u s e A n i m ( )
{
v a r
t l
=
T i m e l i n e L i t e . e x p o r t R o o t ( ) ;
t l . p a u s e ( 0 ) ;
} , < d i v
" f o r m a r e a "
< h 3
A n i m a t i o n : < / h 3
< b u t t o n
" a n i m a t i o n "
P l a y
A n i m a t i o n < / b u t t o n
< b u t t o n
" p a u s e A n i m "
S t o p
A n i m a t i o n < / b u t t o n
< / d i v
 
                This . pen
 
                < d i v
" a p p "
" c o o r d i n a t e s "
c o o r d i n a t e s ( e )
{
. . .
t h i s . s t a r t A r m s . p r o g r e s s ( 1
( e . c l i e n t X
/
w a l l e C o o r d s ) ) . p a u s e ( ) ;
} HTML (V ue Component) Ja vaScript
 
                SVG c an be clipped and SVG c an be clipped and ma sked ma sked
 
                 
                This . pen
 
                < s v g
" s v g "
" 0
0
5 0 0
5 0 0 "
< d e f s
< m a s k
" m a s k "
" u s e r S p a c e O n U s e "
" u s e r S p a c e O n U s e "
< i m a g e
2 . a m a z o n a w s . c o m / s . c d p n . i o / 2 8 9 6 3 / g i p h y
" 1 0 0 % "
" 1 0 0 % "
/
< / m a s k
. . .
< r e c t
" 1 0 0 % "
" 1 0 0 % "
" u r l (
c h e c k e r ) "
" u r l (
m a s k ) "
/
< / s v g
 
                This b y (go follow her!) pen Y oksel
 
                This b y Y oksel reference pen My on the differences CSS- T ricks article
 
                 
                This b y pen Noel Delgado
 
                SVG c an signify something ch anging SVG c an signify something ch anging
 
                This with V ue.js pen
 
                m e t h o d s :
{
/ / t h i s
f o r m a t s
t h e
h o u r
i n f o
w i t h o u t
a
l i b r a r y
g e t C u r r e n t H o u r ( z o n e )
{
l e t
n e w h r
=
n e w
D a t e ( ) . t o L o c a l e T i m e S t r i n g ( ' e n ' ,
{
h o u r :
d i g i t ' ,
m i n u t e :
d i g i t ' ,
h o u r 1 2 :
t r u e ,
t i m e Z o n e :
z o n e
} )
r e t u r n
n e w h r
} ,
. . .
} Side note: get rid of big libr aries
 
                Y o u
c a n
u s e a n
S V G' s Y o u
c a n
u s e a n
S V G' s vi e w B o x
l i k e a
c a m e r a vi e w B o x
l i k e a
c a m e r a
 
                 
                get b box(); get b box();
 
                 
                This . pen
 
                T h i s
. pe n F L O W C H A R T F L O W C H A R T
 
                This b y pen Andre y Sorokin
 
                SVG c an make a GAME SVG c an make a GAME
 
                This . pen
 
                H o w
did w e
u s e
S V G ? H o w
did w e
u s e
S V G ? T h r e e
w ay s: T h r e e
w ay s: Directly inline in the HTML , for loops Background images, for things lik e taco Inline in React
 
                const App = React.createClass({
getInitialState : function ( ) {
return {
score : 500 ,
startTime : 0 ,
finalScore : 0
};
},
_startGame : function ( setGameToStart ) {
this .setState({ isPlaying : setGameToStart,
score : 500 ,
startTime : Date .now()
              });
},
_updateScore : function ( scoreDelta ) {
let score = Math .min( Math .max( 0 , this .state.score + scoreDelta), 1270 );
this .setState({ score : score });
if (score === 0 || score === 1270 ) {
this .setState({ isPlaying : false ,
Math .round(( Date .now() - this .state.s }
},
...
render() {
return (
< div
    ...
    
< HeartMeter
{this.state.score}/
    ...
  
</ div
)
}
});
 
                const HeartMeter = React.createClass({
render() {
return (
  <div>
    <svg className="heartmeter" xmlns="http://www.w3.org/2000/svg" width="2
      <path d="M1741.8 197.7c0 109.3-89 197.8-198.8 197.8a198.6 198.6 0 0 1
      <path d="M1591.8 127c-18.3 0-34.1 14.8-41.4 30.3-7.3-15.5-23.1-30.3-4
      <rect x="68.2" y="140.8" width={this.props.score} height="101.55" fil
    </svg>
  </div>
)
}
});
 
                 
                Request Animation F r ame ( f u n c t i o n
g e t C o o r d s ( )
{
l e t
t C o o r d s
=
t C 1 . g e t B o u n d i n g C l i e n t R e c t ( ) ,
t x C o o r d s
=
t x C 1 . g e t B o u n d i n g C l i e n t R e c t ( ) ,
m C o o r d s
=
m C 1 . g e t B o u n d i n g C l i e n t R e c t ( ) ,
e l C o o r d s
=
e l e 1 . g e t B o u n d i n g C l i e n t R e c t ( ) ;
f u n c t i o n
i n t e r s e c t R e c t ( a ,
b )
{
r e t u r n
M a t h . m a x ( a . l e f t ,
b . l e f t
4 0 )
<
M a t h . m i n ( a . r i g h t ,
b . r i g h t
4 0 )
& &
M a t h . m a x ( a . t o p ,
b . t o p
4 0 )
<
M a t h . m i n ( a . b o t t o m ,
b . b o t t o m
4 0 ) ;
}
/ /
c a n ' t
d o
i f / e l s e
b e c a u s e
s o m e t i m e s
t h e y
b o t h
c o m e
o u t
a t
o n c e
/ /
a n d
o n e
o f
t h e m
w i l l
b e
i g n o r e d
i f
( i n t e r s e c t R e c t ( t C o o r d s ,
e l C o o r d s ) )
{
g e t H i t T e s t I n c r e a s e ( ) ;
}
i f
( i n t e r s e c t R e c t ( t x C o o r d s ,
e l C o o r d s ) )
{
g e t H i t T e s t D e c r e a s e ( ) ;
}
i f
( i n t e r s e c t R e c t ( m C o o r d s ,
e l C o o r d s ) )
{
g e t H i t T e s t M a r g a r i t a ( ) ;
}
r e q u e s t A n i m a t i o n F r a m e ( g e t C o o r d s ) ;
} ( ) ) ;
 
                All this, and we didn't e ven All this, and we didn't e ven get to dat a vis! get to dat a vis!
 
                O' R e i l l y
Book O' R e i l l y
Book SV G
An i mat i o n SV G
An i mat i o n
 
                We b Animation Work shops We b Animation Work shops with V al Head � �
 
                Th ank y ou! Th ank y ou!
on twitter @sar ah_edo
