Interactive SVG-SMIL animation tutorial: Difference between revisions
Line 66: | Line 66: | ||
== Stopping / pausing animation == | == Stopping / pausing animation == | ||
'''Pendulum example''' | |||
''' | |||
* http://tecfa.unige.ch/guides/svg/ex/smil-dom/pendula.svg | * http://tecfa.unige.ch/guides/svg/ex/smil-dom/pendula.svg | ||
* http://tecfa.unige.ch/guides/svg/ex/smil-dom/pendula.html (HTML5 variant, Javascript code is a bit different) | |||
<source lang="XML" enclose="div"> | <source lang="XML" enclose="div"> |
Revision as of 18:47, 10 February 2014
<pageby nominor="false" comments="false"/>
Introduction
This short tutorial will provide an introduction to adding some interactivity to dynamic SVG, ie. SVG-SMIL animation
Prerequisites:
See also:
Alternative reading:
- SVG Essentials/Animating and Scripting SVG (Chapter from the Eisenberg book)
Attention: You must use a recent HTML5 compliant browser (issued 2011 or later), e.g. FireFox, Chrome, Opera or Safari. These examples will not work with Internet Explorer 9.
Simple click and mouse-over examples
SVG-SMIL allows to use user events such as a mouse click.
Something like Button.click
allows to refer to a click event on an SVG element that has id=Button
The following SVG code fragment is part of an HTML5 file:
<svg style="margin-left:50px;border:1px solid blue" height="300" width="300"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg">
<g id="Button"
transform="translate(100,100)">
<ellipse stroke-width="2" stroke="none" fill="yellow" ry="1cm" rx="2cm" >
<animate fill="freeze" dur="1s" begin="Button.click" from="1cm" to="5cm" attributeName="ry"/>
<animate fill="freeze" dur="1s" begin="Button.click" from="2cm" to="10cm" attributeName="rx"/>
</ellipse>
<text style="font-family:Arial;font-size:18;" alignment-baseline="middle" x="-1cm">Click me !</text>
</g>
</svg>
Source code:
- http://tecfa.unige.ch/guides/svg/ex/mouse-over/simple-click.html
- http://tecfa.unige.ch/guides/svg/ex/mouse-over/simple-click2.html (Animation elements outside the animated element)
- http://tecfa.unige.ch/guides/svg/ex/mouse-over/simple-click3.html (Animation happens in another element)
More examples:
Motion animation
Example showing how to start a motion animation:
- http://tecfa.unige.ch/guides/svg/ex/smil-dom/drive-start.svg (Pure SVG)
- http://tecfa.unige.ch/guides/svg/ex/smil-dom/drive-start.html (HTML5 + SVG)
Alternative examples:
Stopping / pausing animation
Pendulum example
- http://tecfa.unige.ch/guides/svg/ex/smil-dom/pendula.svg
- http://tecfa.unige.ch/guides/svg/ex/smil-dom/pendula.html (HTML5 variant, Javascript code is a bit different)
<source lang="XML" enclose="div"> <?xml version="1.0" ?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.0"
viewBox="0 0 300 200">
<script>
function stop () { document.documentElement.pauseAnimations(); }
function start () { document.documentElement.unpauseAnimations(); }
</script> <desc>
The pendulum code was taken from http://www.treebuilder.de/xul/svg2apng/pendel.svg. The pauseAnimations method is documented in the SVG 1.1 spec: http://www.w3.org/TR/SVG/struct.html#__svg__SVGSVGElement__pauseAnimations </desc>
<g> <line x1="100" y1="0" x2="100" y2="90" stroke="black"/> <circle cx="100" cy="90" r="10"/> <animateTransform attributeName="transform" type="rotate"
values="0,100,0;70,100,0;0,100,0;-70,100,0;0,100,0" keySplines="0,0.5,0.5,1;0.5,0,1,0.5;0,0.5,0.5,1;0.5,0,1,0.5" calcMode="spline" begin="0s" dur="4s" repeatCount="indefinite"/>
</g>
<g onclick="stop()" transform="translate(150 0)"> <rect width="50" height="30" rx="10" stroke="black" fill-opacity="0.2"/> <text id="t" style="font:16px Arial Black;fill:white;stroke:black" transform="translate(5 20)">STOP</text> </g>
<g onclick="start()" transform="translate(5 0)"> <rect width="50" height="30" rx="10" stroke="black" fill-opacity="0.2"/> <text id="t" style="font:16px Arial Black;fill:white;stroke:black" transform="translate(2 20)">START</text> </g>
</svg>