Cum să manipulezi și să animați SVG cu Snap.svg

În acest tutorial vom introduce Snap.svg, o bibliotecă JavaScript care ajută la animarea și manipularea conținutului SVG. Pentru a demonstra unele dintre caracteristicile disponibile, vom anima un ochi SVG.

Ce este Snap.svg ?

Snap.svg este o bibliotecă JavaScript care face ușor să creeze și să manipuleze graficele SVG pentru browserele moderne. Este succesorul lui Raphael al lui Dmitri Baranovskiy; cea mai populară bibliotecă Javascript pentru lucrul cu SVG.

RAPHAEL

Raphäel.js este o mare bibliotecă. Lansat în 2008, cea mai mare victorie a fost suportul pentru browserele de la IE 5.5. Cu toate acestea, susținerea atât de multe browsere a fost limitată și a însemnat că nu a putut implementa cele mai recente evoluții, în schimb bazându-se pe un subset comun de caracteristici SVG.

După un timp, comunitatea Raphäel.js sa împărțit în două, un grup care sa bazat pe aceasta pentru compatibilitatea cu browserul încrucișat, și pe cel care l-a folosit pentru crearea de SVG-uri. Acest ultim grup a cerut schimbări pentru a susține mai multe caracteristici SVG pe care Raphäel.js nu le-a putut face.

Prin urmare, Snap.svg a fost construit, scris în întregime de la zero de către Dmitry Baranovskiy (din echipa Adobe Platform Platform), pentru a lucra cu SVG mai ușor și pentru a folosi cele mai recente posibilități oferite de SVG; caracteristici cum ar fi masca, modele, gradienți, grupuri, animații și multe altele.

Ce puteți face cu Snap.svg?

Aruncați o privire la documentația API și veți vedea caracteristici cum ar fi masca, grup, gradient, filtru, animație și model, toate pe care le puteți aplica în SVG.

Snap.svg vă va ajuta să generați grafică, dar poate funcționa și cu SVG existente. Aceasta înseamnă că conținutul dvs. SVG nu trebuie neapărat să fie creat cu Snap.svg, de asemenea, aveți libertatea de a manipula grafice create cu instrumente precum Adobe Illustrator, Inkscape sau Sketch.

Noțiuni de bază cu Snap.svg

Descarca 

În primul rând, va trebui să descărcați Snap.svg. După ce ați terminat, veți găsi în arhivă următoarele:

  • demo-uri - iată câteva exemple, pe care le puteți găsi și pe secțiunea Demo a site-ului lor web
  • dist - acesta este scriptul minificat și necomprimat (pentru dezvoltare) snap.svg 
  • medic - aici veți găsi documentația API care este disponibilă și pe snapsvg.io
  • src - acestea sunt componentele, instrumentele și pluginurile care alcătuiesc Snap.svg, cum ar fi animat, hârtie, care rulează o sarcină Grunt etc..
  • Test - acest director conține teste unitare pentru Snap.svg

Configurarea unui proiect

După descărcarea resurselor Snap.svg, începeți un nou proiect web care trebuie să includă:

  • index.html - fișierul HTML principal
  • js / snap.svg.js - pluginul snap.svg
  • js / main.js - spatiul nostru principal de lucru

Creați un șablon HTML și script-urile de referință "scripts / snap.svg.js" și "scripts / main.js" undeva pe pagina dvs.. 

După asta, așează un  container în interiorul  și dă-i un id. Ar trebui să aveți ceva asemănător:

    Introducerea Snap.svg       

Lucrul cu SVG

Să mergem direct în codificare. Pentru a urmări de-a lungul timpului veți avea nevoie de cunoștințe și cunoștințe de bază despre JavaScript, dar nu contează prea mult pentru că nu mergem prea adânc cu acest tutorial.

În primul rând, vom iniția Snap, îndreptându-ne spre svg tocmai a creat-o și o atribui unei variabile. În cazul nostru, variabila este apelată s

var s = Snap ("# svg");

De acum înainte, în cadrul s variabilă vom avea acces la toate metodele Snap.svg. De exemplu, să presupunem că vrem să creăm un cerc sau un dreptunghi. 

  • Cerc pot lua trei argumente X,y și rază (verificați API-ul Circle)
  • Dreptunghi pot lua șase argumente: X, y, lăţime, înălţime, raza orizontală și raza verticala (verificați API-ul Rect)
  • Elipsă pot lua patru argumente: x, y, raza orizontală și raza verticala (verificați API pentru ellipse)
// Cercul cu raza 80px var circle = s.circle (90,120,80); // Pătrat cu lățimea laterală 160px var square = s.rect (210,40,160,160); // Elipsă cu rază verticală 80px și rază orizontală 50px var ellipse = s.ellipse (460,120,50,80);

Codul de mai sus va genera următorul rezultat:

După cum puteți vedea din captura de ecran atașată, formele, în mod implicit, au a # 000 (negru) umple culoarea fără alt stil. Să interacționăm cu ele și să adăugăm mai multe atribute de styling, cum ar fi culoarea de umplere, opacitatea umplerii, culoarea accidentului, lățimea cursei, opacitatea cursei. Puteți verifica atributele SVG pentru mai multe detalii.

circle.attr (umple: 'coral', accident vascular cerebral: 'coral', strokeOpacity: .3, strokeWidth: 10); square.attr (umplere: "lumină albastră", accident vascular cerebral: "lumină deschisă", accident vascular cerebral: .3, strokeWidth: 10); ellipse.attr (fill: 'mediuturquoise', accident vascular cerebral: 'mediumturquoise', strokeOpacity: .2, strokeWidth: 10);

Aceste atribute au facut forma noastra mult mai frumoasa!

Manipularea în continuare a SVG

Să luăm exemplul nostru și să mergem dincolo de elementele de bază.

Gruparea de forme

Snap.svg folosește o armă puternică numită grup, care, după cum sugerează și numele, grupează vectori împreună, făcându-i o formă. Puteți grupa cât mai multe forme pe care le doriți, adăugându-le ca o listă.

Să creăm două cercuri, să le grupăm și să micșorăm umplerea fiecărui cerc pentru a vizualiza mai clar ce se întâmplă.

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

Forme de mascare cu alte forme

Să spunem acum că vrem să creăm un ochi imaginar folosind elementele grupate pe care le-am făcut deja. Putem face acest lucru folosind masca. Mai întâi trebuie să creăm o elipsă suplimentară și să o plasăm în mijlocul grupului.

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); var cercuri = s.group (circle_1, circle_2); var elipsă = s.ellipse (275, 220, 170, 90); cercuri.attr (umplere: 'coral', fillOpacity: .6,); ellipse.attr (opacitate: .4);



Acum trebuie să mască cercurile cu elipsa noastră, adăugând o culoare de umplere diferită la elipsă:

cercuri.attr (umplere: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (fill: '#fff', opacitate: .8); 

Formatele de animație

Continuând cu exemplul nostru, putem face ca acest ochi să clipească, adăugând o metodă animată. Pentru a anima elipsa pe care tocmai am creat-o, vom modifica raza verticală 1 la 90 (care este valoarea curentă) și din nou.

Creați animația și împachetați-o într-o funcție numită clipi din ochi.

funcția intermitent () ellipse.animate (ry: 1, 220, funcția () ellipse.animate (ry: 90, 300);); ;

Acest lucru spune că vom anima ry: 90 la ry: 1 și din ry: 90 la ry: 1 cu diferite sincronizări.

Acum creați un setInterval pentru a apela clipi din ochio dată la fiecare trei secunde, pentru a crea un efect intermitent.

setInterval (clipește, 3000); 

Codul final ar trebui să arate astfel:

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); // cercuri de grup împreună var cercuri = s.group (circle_1, circle_2); var elipsă = s.ellipse (275, 220, 170, 90); // Adăugați culoarea de umplere și opacitatea în cerc și aplicați // cercurile de mască.attr (fill: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (fill: '#fff', opacitate: .8); // Creați un efect clipit prin modificarea valorii rx // pentru elipse de la 90px la 1px și funcția inversă intermitentă () ellipse.animate (ry: 1, 220, function () ellipse.animate ry: 90 , 300);); ; // Reapelați metoda intermitentă o dată la fiecare 3 secunde setInterval (clipește, 3000); 

Suport pentru browser

După cum am menționat anterior, aceste funcții sunt acceptate în browserele moderne: IE9+, Safari, Chrome, Firefox și Opera.

Open-Source și gratuit

Snap.svg este disponibil sub licență Apache 2, ceea ce înseamnă că este complet open-source și complet gratuit.

Concluzie

Snap.svg scade bariera pentru o manipulare destul de uimitoare a SVG. Sper că v-a plăcut să urmăriți și că te-a inspirat să te uiți mai departe la SVG! 

Link-uri utile

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