Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
En lisant les chapitres précédents du tutoriel sur le langage SVG vous avez constaté que parfois l'encodage en SVG peut s'avérer
fastidieux.
Heureusement il existe des solutions pour éviter cet encodage fastidieux.
Ainsi pour générer du code SVG dans une page web vous pouvez "faire un détour" :
faire appel à un éditeur WYSIWYG de SVG (Inkscape ou Boxy SVG) pour obtenir un document SVG puis coller ce code dans la page web.
Mais il existe une autre solution : faire appel à un framework JavaScript dédié SVG ;
le plus connu est Snap SVG.
Snap SVG propose de nombreuses méthodes pour créer et styliser des formes vectorielles.
On dit souvent que Snap SVG est à SVG ce que jQuery est à JavaScript : il simplifie le développement en SVG comme jQuery simplifie le
développement en JavaScript.
Documentation officielle de la librairie Snap SVG
Vous savez que pour programmer en JS-jQuery, il faut charger la librairie jQuery dans la page.
Et bien pour dessiner via Snap SVG c'est le même principe : il faut charger dans la page la librairie Snap SVG.
Comme avec jQuery, la libraire se résume à un fichier d'extension .js !
Comme en jQuery il existe une version normale et une version compressée de cette librairie.
Allez sur le site http://snapsvg.io et cliquez sur le bouton download pour récupérer un fichier zip.
Décompressez le fichier. Après décompression vous obtenez un dossier "snap.SVG 0.51".
Ouvrez ce dossier et plus précisément le sous-dossier "dist".
C'est dans dossier que vous trouvez les deux librairies proprement dites : la version détaillée (snap.svg.js) et la version minimaliste (snap.svg-min.js).
En supposant que la version minimaliste de la librairie soit enregistrée dans le dossier contenant cette page web, il suffit donc d'inclure dans la partie HEAD de ladite page l'instruction suivante :
<script src="snap.svg-min.js"></scriptgt >
Pour être assuré d'obtenir la dernière version du framework il est possible de se connecter à un CDN. Voir chapitre suivant.
N'oubliez pas de charger le petit fichier correspondant au framework.
Pensez que certains visiteurs désactivent le JavaScript. Dans ce cas les zones de dessin SVG
resteront vierges mais le message dans le conteneur NOSCRIPT avertira le visiteur du problème.
Les scripts Snap SVG peuvent faire référence à des classes définies dans la feuille de style.
Maintenant nous pouvons écrire les différents scripts Snap SVG dans cette page web.
Zoomer à 300% le canevas ; les ronds sont toujours aussi parfaits. Il s'agit bien d'une image vectorielle !
Il ne suffit pas d'écrire le script il faut aussi une instruction HTML pour créer une zone de dessin provisoirement vierge ; à charge pour le script de la remplir ...
Comme tout script JS dans un document HTML, il doit être contenu dans la balise double SCRIPT.
Gros avantage de Snap par rapport au SVG standard : on peut manipuler des variables.
Par exemple : verre.attr(param)
Sachant que la variable param contient : {strokeWidth: 10, stroke:'gray', fill : 'none'}
Il s'agit donc d'un formatage applicable à objets du canevas.
Il s'agit d'une règle de style donc n'oubliez pas les accolades.
Respectez la syntaxe JavaScript pour les propriétés de style :
strokeWidth (et non pas stroke-with), fillOpacity (et non pas fill-opacity), etc.
Il faut donc employer la notation "CamelCase" pour les propriétés.
Je peux simplifier le script. Ainsi je peux remplacer les deux instructions ci-dessous :
var monture = s.path('M 150 110 q 27 -35 50 0');
monture.attr(param);
Par une seule :
var monture = s.path('M 150 110 q 27 -35 50 0').attr(param);
Donc une seule instruction pour dessiner et styler un objet en chainant les méthodes path & attr.
On peut lire le code SVG généré par le framework. Il suffit d'ouvrir l'onglet "éléments" dans la console du navigateur.
Ci-dessous le code généré dans le navigateur Google Chrome :
Ci-dessous je dessine certains objets via un script Snap puis je reviens à l'encodage en SVG natif.
Via un script Snap je dessine deux rectangles.
À l'extérieur du script donc en SVG natif, je dessine deux petits rectangles.
Notez bien l'imbrication des conteneurs (balises doubles).
Je ferme le conteneur script alors que je n'ai pas encore fermé le conteneur svg donc je peux toujours écrire
des instructions en SVG natif.
Comme tout framework et pour avoir la dernière version, mais à condition d'avoir une connection internet, il est préférable de charger le fichier à partir d'un site proposant les versions les plus récentes des outils web.
Extrait de la partie HEAD de cette page :
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js" > < /script >
Notez que la ligne noire est au dessus de l'ellipse et que l'ensemble est penché.
Instruction HTML :
< svg viewBox ="0 0 800 400" width ="80%" id ="canevas3" >
Le script à la suite :
var s = Snap("#canevas3") ;
var rx = 100; var ry = 150;
// dimensions futures de l'ellipse
var ligne = s.line(100,200,300,200).attr({stroke: 'black', strokeWidth : 30}) ;
// dessiner ligne
var ellipse = s.ellipse(200, 200, rx, ry).attr({fill: 'blue'}).after(ligne);
// dessiner ellipse sous ligne
var groupe = s.group(ellipse,ligne);
// grouper les deux formes en un objet
groupe.attr({transform : 't400r45'});
// translater et incliner l'objet
Bien sûr ce code JS-Snap doit être contenu dans la balise double SCRIPT.
Il faut ensuite fermer l'élément SVG :
< /svg >
Je vous rappelle que si vous voulez des canevas "responsives" la valeur de l'attribut width de l'élément SVG doit être exprimé en pourcentage et par ailleurs il faut impérativement utiliser l'attribut viewBox avec une suite de quatre valeurs.
L'instruction qui dessine l'ellipse est exécutée après celle qui dessine la ligne ; donc l'ellipse devrait être normalement au dessus
de la ligne or c'est l'inverse ...
En effet j'ai utilisé la méthode after(élément). Il existe aussi la méthode before(élément).
Ces deux méthodes sont pratiques car elles permettent de modifier l'ordre d'empilement des objets
sans que vous ayez à bouleverser l'ordre des instructions JS dans le script.
Dans ce script j'utilise la méthode transform(). J'y reviendrai.
Grâce à l'emploi d'une boucle dans le cadre d'un script Snap SVG on peut générer beaucoup de code SVG avec un script minimaliste.
Le script est très concis.
Remarquez que systématiquement les balises sont doubles même lorsque ce n'est pas nécessaire.
Cette fois on apprécie vraiment le framework car il évite un encodage fastidieux ...