Come manipolare e animare SVG con Snap.svg

In questo tutorial introdurremo Snap.svg, una libreria JavaScript che assiste nell'animazione e nella manipolazione del contenuto SVG. Per dimostrare alcune delle funzionalità disponibili, animeremo un occhio SVG.

Cos'è Snap.svg ?

Snap.svg è una libreria JavaScript che semplifica la creazione e la manipolazione di grafica SVG per i browser moderni. È il successore di Raphaël di Dmitry Baranovskiy; la libreria Javascript più popolare per lavorare con SVG.

Raphäel

Raphäel.js è una grande biblioteca. Rilasciato nel 2008, la sua più grande vittoria è stata il supporto per i browser da IE 5.5 in poi. Tuttavia, il supporto di così tanti browser era limitante e significava che non poteva implementare gli ultimi sviluppi, affidandosi invece a un sottoinsieme comune di funzionalità SVG.

Dopo un po 'la community di Raphäel.js si è divisa in due, un gruppo che si è basato su di esso per la compatibilità tra browser e altro che lo ha utilizzato per creare SVG. Quest'ultimo gruppo richiedeva modifiche per supportare più funzionalità SVG che Raphäel.js non poteva gestire.

Quindi Snap.svg è stato creato, scritto interamente da Dmitry Baranovskiy (del team di Adobe Web Platform), al fine di lavorare con SVG più facilmente e utilizzare l'ultimo che SVG può offrire; caratteristiche come mascheramento, motivi, gradienti, gruppi, animazioni e altro ancora.

Cosa puoi fare con Snap.svg?

Dai un'occhiata alla documentazione dell'API e vedrai funzioni come maschera, gruppo, gradiente, filtro, animate e pattern, che puoi applicare agli SVG.

Snap.svg ti aiuterà a generare grafica, ma può anche funzionare con SVG esistente. Ciò significa che il tuo contenuto SVG non deve necessariamente essere creato con Snap.svg, puoi anche manipolare la grafica creata con strumenti come Adobe Illustrator, Inkscape o Sketch.

Introduzione a Snap.svg

Scaricare 

Innanzitutto, è necessario scaricare Snap.svg. Fatto ciò, troverai nell'archivio quanto segue:

  • demo - ecco alcuni esempi, che puoi trovare anche nella sezione Demo del loro sito web
  • dist - questo è lo script snap.svg minificato e non compresso (per lo sviluppo) 
  • doc - qui troverai la documentazione API che è anche disponibile su snapsvg.io
  • src - questi sono i componenti, gli strumenti e i plugin che compongono Snap.svg, come l'animazione, la carta, l'esecuzione di un'attività Grunt, ecc.
  • test - questa directory contiene i test unitari per Snap.svg

Impostazione di un progetto

Dopo aver scaricato le risorse Snap.svg, avviare un nuovo progetto Web che deve includere:

  • index.html - il file HTML principale
  • JS / snap.svg.js - il plugin snap.svg
  • JS / main.js - il nostro spazio di lavoro principale

Crea un modello HTML e fai riferimento agli script "scripts / snap.svg.js" e "scripts / main.js" da qualche parte sulla tua pagina. 

Dopo, posiziona un  contenitore dentro il  e dargli un ID. Dovresti avere qualcosa di simile a questo:

    Presentazione di Snap.svg       

Lavorare con SVG

Passiamo ora direttamente alla codifica. Per seguirti avrai bisogno di una conoscenza e comprensione basilari di JavaScript, ma non importa troppo perché non stiamo andando troppo in profondità con questo tutorial.

In primo luogo, inizializzeremo lo snap, puntando al svg appena creato e assegnarlo a una variabile. Nel nostro caso viene chiamata la variabile S

var s = Snap ("# svg");

Da ora in poi, all'interno del S variabile avremo accesso a tutti i metodi Snap.svg. Ad esempio, supponiamo di voler creare un cerchio o un rettangolo. 

  • Cerchio può prendere tre argomenti X,y e raggio (controlla Circle API)
  • Rettangolo può prendere sei argomenti: X, y, larghezza, altezza, raggio orizzontale e raggio verticale (controlla Rect API)
  • Ellisse può prendere quattro argomenti: x, y, raggio orizzontale e raggio verticale (controlla l'API di ellisse)
// Cerchio con raggio 80px var circle = s.circle (90,120,80); // Quadrato con larghezza lato 160 px var square = s.rect (210,40,160,160); // Ellisse con 80px raggio verticale e 50px raggio orizzontale var ellipse = s.ellipse (460,120,50,80);

Il codice sopra genererà il seguente risultato:

Come puoi vedere dallo screenshot allegato, le forme, per impostazione predefinita, hanno a # 000 (nero) riempie il colore senza altri stili. Interagiamo con loro e aggiungiamo alcuni altri attributi di stile, come il colore di riempimento, l'opacità del riempimento, il colore del tratto, la larghezza del tratto, l'opacità del tratto. È possibile controllare gli attributi SVG per maggiori dettagli.

circle.attr (fill: 'coral', stroke: 'coral', strokeOpacity: .3, strokeWidth: 10); square.attr (fill: 'lightblue', stroke: 'lightblue', strokeOpacity: .3, strokeWidth: 10); ellipse.attr (fill: 'mediumturquoise', tratto: 'mediumturquoise', strokeOpacity: .2, strokeWidth: 10);

Questi attributi hanno reso le nostre forme svg molto più belle!

Ulteriore manipolazione di SVG

Prendiamo il nostro esempio e andiamo oltre le basi.

Raggruppamento di forme

Snap.svg utilizza un'arma potente chiamata gruppo, che, come suggerisce il nome, raggruppa i vettori, rendendoli una forma. Puoi raggruppare tutte le forme che desideri aggiungendole come elenco.

Creiamo due cerchi, raggruppali e abbassiamo il riempimento di ogni cerchio per visualizzare più chiaramente cosa sta succedendo.

var circle_1 = s.circle (200, 200, 140); var circle_2 = s.circle (150, 200, 140); var circles = s.group (circle_1, circle_2); circles.attr (fill: 'coral', fillOpacity: .6);

Forme di mascheramento con altre forme

Diciamo ora che vogliamo creare un occhio immaginario usando gli elementi raggruppati che abbiamo già creato. Possiamo farlo usando la maschera. Per prima cosa dobbiamo creare un'ellisse extra e posizionarla nel mezzo del gruppo.

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); var circles = s.group (circle_1, circle_2); var ellipse = s.ellipse (275, 220, 170, 90); circles.attr (fill: 'coral', fillOpacity: .6,); ellipse.attr (opacity: .4);



Ora abbiamo bisogno di mascherare i cerchi con la nostra ellisse, aggiungendo un diverso colore di riempimento all'ellisse:

circles.attr (fill: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (fill: '#fff', opacity: .8); 

Forme animate

Continuando con il nostro esempio, possiamo far lampeggiare questo occhio, aggiungendo un metodo animato. Per animare l'ellisse che abbiamo appena creato, modificheremo il raggio verticale da 1 a 90 (che è il valore corrente) e viceversa.

Crea l'animazione e avvolgila in una funzione chiamata lampeggiare.

function blink () ellipse.animate (ry: 1, 220, function () ellipse.animate (ry: 90, 300);); ;

Questo afferma che stiamo per animare da ry: 90 a ry: 1 e da ry: 90 a ry: 1 con tempi diversi.

Ora crea un setInterval chiamare il lampeggiaremetodo una volta ogni tre secondi, in modo da creare un effetto lampeggiante.

setInterval (lampeggia, 3000); 

Il codice finale dovrebbe assomigliare a questo:

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); // Raggruppa i cerchi insieme var circles = s.group (circle_1, circle_2); var ellipse = s.ellipse (275, 220, 170, 90); // Aggiungi colore di riempimento e opacità al cerchio e applica // alla maschera circles.attr (fill: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (fill: '#fff', opacity: .8); // Crea un effetto lampeggiante modificando il valore rx // per l'ellisse da 90px a 1px e la funzione all'indietro lampeggia () ellipse.animate (ry: 1, 220, function () ellipse.animate (ry: 90 , 300);); ; // Richiamare il metodo di lampeggiamento una volta ogni 3 secondi setInterval (lampeggia, 3000); 

Supporto del browser

Come accennato in precedenza, queste funzionalità sono supportate nei browser moderni: IE9+, Safari, Chrome, Firefox e Opera.

Open-Source e gratuito

Snap.svg è disponibile con una licenza Apache 2 che significa che è completamente open-source e completamente gratuito.

Conclusione

Snap.svg abbassa la barriera per una manipolazione SVG piuttosto sorprendente. Spero vi sia piaciuto seguirlo e che sia stato ispirato a guardare ulteriormente in SVG! 

link utili

  • @snapvg su Twitter
  • https://github.com/adobe-webplatform/Snap.svg
  • Snapsvg forum