Comment manipuler et animer des fichiers SVG avec Snap.svg

Dans ce didacticiel, nous allons présenter Snap.svg, une bibliothèque JavaScript qui aide à l’animation et à la manipulation du contenu SVG. Pour illustrer certaines des fonctionnalités disponibles, nous allons animer un œil SVG..

Qu'est-ce que Snap.svg ?

Snap.svg est une bibliothèque JavaScript qui facilite la création et la manipulation de graphiques SVG pour les navigateurs modernes. C'est le successeur de Raphaël de Dmitry Baranovskiy; la bibliothèque Javascript la plus populaire pour travailler avec SVG.

Raphäel

Raphäel.js est une super bibliothèque. Publié en 2008, sa plus grande victoire a été son support pour les navigateurs à partir de IE 5.5. Cependant, prendre en charge autant de navigateurs était contraignant et empêchait de mettre en œuvre les derniers développements, mais reposait sur un sous-ensemble commun de fonctionnalités SVG..

Après un certain temps, la communauté Raphäel.js s'est divisée en deux, un groupe qui s'en est inspiré pour la compatibilité entre navigateurs et un autre qui l'a utilisé pour créer des SVG. Ce dernier groupe a demandé des modifications pour prendre en charge davantage de fonctionnalités SVG que Raphäel.js ne pouvait pas gérer..

Ainsi, Snap.svg a été construit, entièrement écrit à partir de rien par Dmitry Baranovskiy (de l'équipe Adobe Web Platform), afin de travailler plus facilement avec SVG et d'utiliser les dernières nouveautés proposées par SVG; des fonctionnalités telles que le masquage, les motifs, les dégradés, les groupes, les animations, etc..

Que pouvez-vous faire avec Snap.svg?

Jetez un coup d'œil à la documentation de leur API et vous verrez des fonctionnalités telles que masque, groupe, dégradé, filtre, animation et motif, que vous pourrez appliquer aux SVG..

Snap.svg vous aidera à générer des graphiques, mais il peut également fonctionner avec des SVG existants. Cela signifie que votre contenu SVG ne doit pas nécessairement être créé avec Snap.svg, vous êtes également libre de manipuler des graphiques créés avec des outils tels que Adobe Illustrator, Inkscape ou Sketch..

Démarrer avec Snap.svg

Télécharger 

Tout d'abord, vous devez télécharger Snap.svg. Ceci fait, vous trouverez les éléments suivants dans les archives:

  • démos - voici quelques exemples, que vous pouvez également trouver dans la section Démo de leur site web
  • dist - c'est le script snap.svg minifié et non compressé (pour le développement) 
  • doc - vous trouverez ici la documentation de l'API qui est également disponible sur snapsvg.io
  • src - Ce sont les composants, les outils et les plugins qui composent Snap.svg, comme animer, gérer du papier, exécuter une tâche Grunt, etc..
  • tester - ce répertoire contient des tests unitaires pour Snap.svg

Mise en place d'un projet

Après avoir téléchargé les ressources Snap.svg, commencez un nouveau projet Web qui doit inclure:

  • index.html - le fichier HTML principal
  • js / snap.svg.js - le plugin snap.svg
  • js / main.js - notre espace de travail principal

Créez un modèle HTML et faites référence aux scripts "scripts / snap.svg.js" et "scripts / main.js" quelque part sur votre page.. 

Après cela, placez un  conteneur à l'intérieur du  et donnez-lui un identifiant. Vous devriez avoir quelque chose comme ça:

    Présentation de Snap.svg       

Travailler avec SVG

Passons maintenant directement au codage. Pour suivre, vous aurez besoin de connaissances de base en JavaScript et de compréhension, mais cela n'a pas d'importance, car nous n'allons pas trop loin avec ce tutoriel..

Tout d'abord, nous allons initialiser Snap, en pointant vers le svg vient de créer et l'assigne à une variable. Dans notre cas, la variable s'appelle s

var s = Snap ("# svg");

A partir de maintenant, dans le s variable, nous aurons accès à toutes les méthodes Snap.svg. Par exemple, disons que nous voulons créer un cercle ou un rectangle. 

  • Cercle peut prendre trois arguments X,y et rayon (vérifier l'API Circle)
  • Rectangle peut prendre six arguments: X, y, largeur, la taille, rayon horizontal et rayon vertical (vérifier l'API Rect)
  • Ellipse peut prendre quatre arguments: x, y, rayon horizontal et rayon vertical (vérifier API ellipse)
// Cercle de rayon 80px var circle = s.circle (90,120,80); // Square avec une largeur de côté de 160px var square = s.rect (210,40,160,160); // Ellipse avec rayon vertical 80px et rayon horizontal 50px var ellipse = s.ellipse (460, 120, 50, 80);

Le code ci-dessus générera le résultat suivant:

Comme vous pouvez le voir sur la capture d'écran ci-jointe, les formes ont par défaut un # 000 Couleur de remplissage (noir) sans autre style. Interagissons avec eux et ajoutons d'autres attributs de style, tels que la couleur de remplissage, l'opacité du remplissage, la couleur du trait, la largeur du trait, l'opacité du trait. Vous pouvez vérifier les attributs SVG pour plus de détails.

circle.attr (remplissage: 'corail', contour: 'corail', strokeOpacity: .3, strokeWidth: 10); square.attr (remplissage: 'lightblue', contour: 'lightblue', strokeOpacity: .3, strokeWidth: 10); ellipse.attr (remplissage: 'mediumturquoise', contour: 'mediumturquoise', strokeOpacity: .2, strokeWidth: 10);

Ces attributs ont rendu nos formes de svg beaucoup plus jolies!

Manipulation supplémentaire de SVG

Prenons notre exemple et allons au-delà des bases.

Regroupement des formes

Snap.svg utilise une arme puissante appelée groupe, qui, comme son nom l'indique, regroupe les vecteurs, ce qui en fait une seule forme. Vous pouvez regrouper autant de formes que vous le souhaitez en les ajoutant sous forme de liste..

Créons deux cercles, regroupons-les et réduisons le remplissage de chaque cercle pour visualiser plus clairement ce qui se passe..

var circle_1 = s.circle (200, 200, 140); var circle_2 = s.circle (150, 200, 140); var cercles = s.group (circle_1, circle_2); cercles.attr (remplissage: 'corail', fillOpacity: .6);

Masquage de formes avec d'autres formes

Disons maintenant que nous voulons créer un œil imaginaire en utilisant les éléments groupés que nous avons déjà créés. Nous pouvons le faire en utilisant un masque. Nous devons d’abord créer une ellipse supplémentaire et la placer au milieu du groupe..

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



Nous devons maintenant masquer les cercles avec notre ellipse, en ajoutant une couleur de remplissage différente à l’ellipse:

cercles.attr (remplissage: 'corail', remplissageOpacité: .6, masque: ellipse); ellipse.attr (remplissage: '#fff', opacité: .8); 

Animation de formes

En continuant avec notre exemple, nous pouvons faire clignoter cet œil en ajoutant une méthode animée. Pour animer l'ellipse que nous venons de créer, nous allons modifier le rayon vertical de 1 à 90 (qui est la valeur actuelle) et retour.

Créez l'animation et enroulez-la dans une fonction appelée cligner.

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

Cela indique que nous allons animer de ry: 90 à ry: 1 et de ry: 90 à ry: 1 avec un timing différent.

Maintenant, créez un setInterval appeler le clignerméthode une fois toutes les trois secondes, afin de créer un effet clignotant.

setInterval (clignotement, 3000); 

Le code final devrait ressembler à ceci:

var circle_1 = s.circle (300, 200, 140); var circle_2 = s.circle (250, 200, 140); // Regrouper des cercles var circles = s.group (circle_1, circle_2); ellipse var = s.ellipse (275, 220, 170, 90); // Ajoute de la couleur et de l'opacité au cercle et applique // le masque circles.attr (fill: 'coral', fillOpacity: .6, mask: ellipse); ellipse.attr (remplissage: '#fff', opacité: .8); // Crée un effet de clignotement en modifiant la valeur de rx // pour une ellipse de 90px à 1px et en arrière blink () ellipse.animate (ry: 1), 220, function () ellipse.animate (ry: 90 , 300);); ; // Rappelle la méthode de clignotement une fois toutes les 3 secondes. SetInterval (blink, 3000); 

Prise en charge du navigateur

Comme mentionné précédemment, ces fonctionnalités sont prises en charge par les navigateurs modernes: IE9+, Safari, Chrome, Firefox et Opera.

Open-Source et gratuit

Snap.svg est disponible sous licence Apache 2, ce qui signifie qu'il est complètement open-source et totalement gratuit..

Conclusion

Snap.svg abaisse la barrière pour une manipulation SVG assez étonnante. J'espère que vous avez aimé suivre et que cela vous a incité à approfondir vos connaissances sur SVG! 

Liens utiles

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