Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

SVG e SMIL: parte seconda

Animare le immagini SVG attraverso il linguaggio SMIL: Pratica
Animare le immagini SVG attraverso il linguaggio SMIL: Pratica
Link copiato negli appunti

Dopo aver definito in maniera teorica gli elementi e gli attributi SMIL utilizzati per animare gli elementi SVG, passiamo a vedere qualche esempio pratico.
Consideriamo il seguente esempio:

<svg width="500" height="300" viewBox="0 0 500 300">
  <line x1="100" y1="100" x2="400" y2="100" fill="none" stroke="black" stroke-width="2"/>
  <circle cx="100" cy="100" r="10" fill="red" stroke="black" stroke-width="2">
    <animate attributeName="cx" attributeType="XML" begin="1s" dur="5s" fill="freeze" from="100" to="400" repeatCount="indefinite" />
  </circle>
</svg>

Link esempio: animSmil1.svg

Questo esempio è molto simile a quello visto nel capitolo delle animazioni realizzate con script. In questo caso l'elemento <circle> viene animato utilizzando il tag SMIL <animate>, inserito al suo interno. L'animazione inizia dopo 1 secondo dal caricamento dell'immagine SVG (begin="1s") e dura per 5 secodi (dur="5s"). Viene realizzata andando a modificare l'attributo cx di <circle> (attributeName="cx"), portandolo da un valore di 100 (from="100") fino ad un valore di 400 (to="400") ed il tutto viene poi ripetuto fino alla chiusura del file SVG (repeatCount="indefinite").

Consideriamo un ulteriore esempio:

<svg width="500" height="300" viewBox="0 0 500 300" xmlns:xlink="http://www.w3.org/1999/xlink">
  <path id="percorso" d="M100,250 C100,10 400,10 400,250" fill="none" stroke="green" stroke-width="5"/>
  <circle cx="0" cy="0" r="10" fill="red" stroke="black" stroke-width="2">
    <animateMotion begin="0s" dur="5s" repeatCount="indefinite">
      <mpath xlink:href="#percorso"/>
    </animateMotion>
  </circle>
</svg>

Link esempio: animSmil2.svg

In questo esempio l'elemento <circle> viene fatto muovere lungo un path utilizzando <animateMotion>, dichiarato al suo interno.
L'animazione inizia appena caricato il file SVG (begin="0s"), dura 5 secondi (dur="5s") e viene successivamente ripetuta fino alla chiusura del file (repeatCount="indefinite").
Il path lungo il quale si muove <circle> viene definito dall'elemento <mpath> che contiene al suo interno un link al path chiamato "percorso".

L'ultimo esempio riguarda il funzionamento dell'attributo calcMode:

<svg width="500" height="300" viewBox="0 0 500 500">
  <g>
    <text x="5" y="100" fill="black" font-family="times" font-size="20">
      Discrete  
    </text>
    <line x1="100" y1="100" x2="400" y2="100" fill="none" stroke="black" stroke-width="2"/>
    <circle cx="100" cy="100" r="10" fill="red" stroke="black" stroke-width="2">
      <animate attributeName="cx" attributeType="XML" begin="1s" dur="5s" repeatCount="indefinite" values="100;150;250;400" calcMode="discrete"/>      
    </circle>
  </g>
  <g transform="translate(0,100)">
    <text x="5" y="100" fill="black" font-family="times" font-size="20">
      Linear  
    </text>
    <line x1="100" y1="100" x2="400" y2="100" fill="none" stroke="black" stroke-width="2"/>
    <circle cx="100" cy="100" r="10" fill="red" stroke="black" stroke-width="2">
      <animate attributeName="cx" attributeType="XML" begin="1s" dur="5s" repeatCount="indefinite" values="100;150;250;400" calcMode="linear"/>      
    </circle>
  </g>
  <g transform="translate(0,200)">
    <text x="5" y="100" fill="black" font-family="times" font-size="20">
      Paced  
    </text>
    <line x1="100" y1="100" x2="400" y2="100" fill="none" stroke="black" stroke-width="2"/>
    <circle cx="100" cy="100" r="10" fill="red" stroke="black" stroke-width="2">
      <animate attributeName="cx" attributeType="XML" begin="1s" dur="5s" repeatCount="indefinite" values="100;150;250;400" calcMode="paced"/>      
    </circle>
  </g>
  <g transform="translate(0,300)">
    <text x="5" y="100" fill="black" font-family="times" font-size="20">
      Spline  
    </text>
    <line x1="100" y1="100" x2="400" y2="100" fill="none" stroke="black" stroke-width="2"/>
    <circle cx="100" cy="100" r="10" fill="red" stroke="black" stroke-width="2">
      <animate attributeName="cx" attributeType="XML" begin="1s" dur="5s" repeatCount="indefinite" values="100;150;250;400" calcMode="spline"/>      
    </circle>
  </g>
</svg>

Link esempio: animSmil3.svg

In questo esempio abbiamo quattro animazioni che fanno muovere un elemento circolare lungo un segmento. I parametri delle animazioni sono uguali nei quattro casi ad eccezione dell'attributo calcMode che assume tutti i valori possibili. Questo esempio serve a mettere in evidenza come cambiando il metodo di interpolazione si posoano creare animazioni differenti pur lasciando invariati gli altri paramentri.

Ti consigliamo anche