Although SVG elements can actually be animated using SMIL, sometimes it's preferable to use another approach. In this case we're going to use jQuery to animate a simple SVG graphic. Before
we get through this topic, there are a couple of things that you have to know. First of all, you have to serve your documents as application/xhtml+xml
. In fact, SVG doesn't work
if you use text/html
. Second, your documents must be well-formed or you get an XML parsing error. Now let's start with a simple SVG image embedded in an XHTML document:
<svg width="300px" height="300px" version="1.1" xmlns="http://www.w3.org/2000/svg" id="svg-img"> <desc>Sample logo</desc> <defs> <filter id="dropshadow"> <feGaussianBlur result="blurredAlpha" in="SourceAlpha" stdDeviation="3" /> <feOffset result="offsetBlurredAlpha" in="blurredAlpha" dx="3" dy="3" /> <feFlood result="flooded" style="flood-color: black; flood-opacity: 0.65" /> <feComposite result="coloredShadow" in="flooded" operator="in" in2="offsetBlurredAlpha" /> <feComposite in="SourceGraphic" operator="over" in2="coloredShadow" /> </filter> </defs> <polygon points="114, 61, 87, 211, 140, 211" style="filter: url(#dropshadow); stroke: #ddd; stroke-width: 1; stroke-opacity: 1; fill: #ccc; fill-opacity: 1;" /> </svg>
Now we can use jQuery:
$(document).ready(function() { $('#svg-img').css('position', 'relative'); $('#animate').click(function(e) { $('#svg-img').animate({ left: '100px', height: '0', width: '0', opacity: 'toggle' }, 'slow'); e.preventDefault(); }); });
This example works as expected in Opera, Safari and Chrome. Firefox 3.6 simply makes the SVG image disappear. You can see the final result here.