SVG
Børre Stenseth

Animasjoner

Hva

Vi kan animere geometrien ved hjelp av animasjonselementer. I modulen Rotasjon ser vi litt nærmere på hvordan vi kan plante animasjoner i SVG-DOM. Nedenfor finner du noen grunnleggende eksempler.

Microsoft IE henger ikke med på de løsningens om er laget i dette materialet.

Vi forholder oss til følgende animasjonselementer som kan plasseres inne i et grunnelement(rect,circle osv.) eller i et g(ruppe)-element:

  • animate. For å animere en bestemt attributt.
  • animateTransform. For å animere transformasjoner som skalering og rotasjon
  • animateMotion. For å animere at elementet følger en path

Hver av disse har en rekke attributter for å styre animasjonen. Vi kommer ikke innom alle mulige variater, men har ambisjoner om å vise hovedtrekkene og peke på noen ikke helt opplagte effekter (eller mange på sådanne). Denne delen av SVG er relativt komplisert.

animate

Et enkelt eksempel:

_demo0
<svg id="svg0" width="400" height="60" style="background:beige"
     viewPort="0 0 400 60" version="1.1">    
    <circle cx="20" cy="30" r="20" fill="red">
        <animate  
                 attributeType="XML"
                 attributeName="cx"
                 from="20"
                 to="350"
                 dur="30s"
                 repeatCount="indefinite"
                 begin="5s"/>
    </circle>    
</svg>

Attributtene er i hovedsak selvforklarende: Vi vil at animasjonen skal starte 5s etter at siden er lastet, at den skal vare i 30s og flytte sirkelen fra cx=20 til cx=3050, og dette skal holde på i "evig" tid. Merk at attributeType kan ha verdiene XML, CSS eller auto.

Vi forsøker å kontrollere animasjonen med Javascript:

_demo1

Merk at attributten fill sørger for at elementet forblir der animasjonen slutter.

Javascriptkoden er slik:

_demo1.js

animateTransform

Et enkelt eksempel:

_demo2
<svg id="svg2" width="150" height="150" style="background:beige"
     viewPort="0 0 150 150">
    
    <rect x="50" y="50" width="50" height="50" fill="red">
        <animateTransform 
                 attributeType="XML"
                 attributeName="transform"
                 type="rotate"
                 from= "0 75 75"
                 to=   "360 75 75"
                 dur=  "3s"
                 repeatCount="indefinite"
                 begin="0s"
                 />
    </rect>    
</svg>

Attributtene to of from angir at vi skal animere fra 0 til 360 grader om punktet 75,75. (Du kan få ganske pussige effekter dersom du leker med grader og har forskjellig rotasjonssentrum i from og to.)

Vi forsøker å konytrollere denne transformasjonen med Javascript.

Dette er teksten

_demo3

Javascriptkoden er slik:

_demo3.js

animateMotion

Her definerer vi en path og vi lar et element følge denne stien.

_demo4

Programmert

Vi kan selvsagt også lage våre egne animasjoner ved hjelp av tidsstyring med Javascript

_demo3

Javascriptkoden er slik:

_demo5.js