Animeren van SVG

Karel-Jan 16 juli 2015

Doordat bijna alle browsers inmiddels SVG ondersteunen is deze techniek razendsnel terrein aan het winnen. SVG is een vector formaat voor het web. Het grote voordeel van SVG is dat zo’n afbeelding op alle resoluties scherp zal zijn. Je hoeft dus bijvoorbeeld geen rekening te houden met retina schermen. Daarnaast biedt SVG nog een groot voordeel. SVG bestanden kan je animeren.

Je kan een SVG op drie manieren animeren, namelijk via HTML, CSS of javascript. In deze blog wil ik deze drie methodes in het kort behandelen.

HTML

Om met HTML een SVG te kunnen animeren kan je gebruik maken van de inline SVG syntax. Dat betekent dat je de XML code direct aan je HTML toevoegt. Vervolgens kan je bepaalde onderdelen van de SVG laten animeren volgens het SMIL principe. SMIL staat voor Synchronized Multimedia Integration Language en biedt functies om animaties toe te passen. Hiervoor kan je de animate tag gebruiken. Dat betekent dat je binnen een path in het SVG bestand de animate tag moet aanroepen. Dat werkt als volgt:

</p>
<p>&lt;animate attributeName=&quot;fill&quot; dur=&quot;500ms&quot; from=&quot;blue&quot; to=&quot;red&quot;&gt;</p>
<p>

De attribuateName geeft aan voor welk attribuut de animatie uitgevoerd moet worden. Je kan hier elke attribute uit de path gebruiken. De from en to attributen zijn bedoeld voor de status van het begin en het eind van de animatie. Met dur kan je de lengte van de animatie bepalen. Op de developer site van Mozilla is meer informatie over deze functionaliteit te vinden.

CSS

Het animeren van een SVG via CSS werkt hetzelfde zoals je een ander HTML element zou animeren. Door een onderdeel (path) van de SVG een class of een ID te geven, kan je deze vervolgens aanroepen in CSS.

</p>
<p>.element {<br />
 animation: move 2s infinite;<br />
}</p>
<p>@keyframes move {<br />
 to {<br />
 transform: translateX(200px);<br />
 }<br />
}</p>
<p>

Hiermee kan je een bepaald element binnen je SVG bestand animeren. Je kan hier alle beschikbare CSS animatie selectors voor gebruiken. Zo kan je een element een ander kleur geven, laten draaien, vergroten, verkleinen, etc.

Javascript

De javascript methode is de meeste flexibele en uitgebreide oplossing. Javascript biedt namelijk allerlei extra mogelijkheden en functies die met HTML en CSS niet mogelijk zijn. Er zijn een aantal javascript libraries die het erg eenvoudig maken om met SVG’s te werken. Eén van deze libraries is Snap.svg. Snap biedt allerlei handige functies waarmee je een SVG kunt animeren. Het werkt erg eenvoudig. We plaatsen de SVG in een variable, waar we vervolgens allerlei functies op kunnen uitvoeren. Met onderstaande code geven we een SVG bijvoorbeeld een andere kleur. De animatie duurt in dit geval 2 seconden.

<br />
var object = Snap( '#object' );</p>
<p>object.animate( {<br />
 fill: 'orange'<br />
}, 2000 );<br />

Op de website van Snap staan een aantal handige voorbeelden om je op weg te helpen.

2 reacties

  1. Naast dat je kunt animeren met SVG is het overkoepelende toverwoord denk ik ‘Interactie’. Met SVG kun je interactieve elementen maken die je cross-browser en cross-device kunt tonen.

    Ook met bijvoorbeeld tekst kun je hier mooie resultaten behalen in SVG’s met de tag. Groot voordeel is dat deze teksten ook gewoon geïndexeerd worden door zoekmachines.

    Qua snelheid kun je optimaliseren door alle grafische elementen in de SVG op te nemen en deze inline in de code te plaatsen. Hierdoor voer je geen extra HTTP requests uit.

    Mooi voorbeeld van een interactief SVG element:
    https://tympanus.net/Tutorials/InteractiveSVG/

  2. Rudolf, bedankt voor de aanvulling. Mooi voorbeeld! Dergelijke voorbeelden illustreren perfect de potentie van SVG. Interactie is waar het op het web allemaal om draait.

Altijd op de hoogte blijven?