Quelle balise est utilisée pour intégrer des graphiques ? Graphiques vectoriels évolutifs en HTML5

Concepts de base et utilisation

Le format SVG (Scalable Vector Graphics) fait partie d'une famille de normes graphiques vectorielles. Les graphiques vectoriels diffèrent des graphiques raster, dans lesquels la définition des couleurs de chaque pixel est stockée dans un tableau de données. Les formats raster les plus couramment utilisés sur Internet aujourd'hui sont JPEG, GIF et PNG, chacun présentant ses propres avantages et inconvénients.

Abréviations couramment utilisées
  • CSS : feuilles de style en cascade
  • GIF : format d'échange graphique
  • GUI : interface utilisateur graphique
  • HTML : langage de balisage hypertexte
  • JPEG : Groupe commun d'experts en photographie
  • PNG : graphiques de réseau portables
  • SVG : graphiques vectoriels évolutifs
  • XML : langage de balisage extensible

Le format SVG présente plusieurs avantages par rapport à n'importe quel format raster :

  • Les graphiques SVG sont créés à l'aide de formules mathématiques qui nécessitent beaucoup moins de données à stocker dans le fichier d'origine car il n'est pas nécessaire de stocker des données pour chaque pixel individuel.
  • Les images vectorielles s'adaptent mieux. Tenter de redimensionner les images publiées en ligne au-delà de leur taille d'origine peut entraîner des images déformées (ou pixellisées).

    En effet, les données de pixels d'origine ont été conçues pour une taille d'image spécifique. Lors du redimensionnement, le moteur de rendu d'image devine quelles données doivent être utilisées pour remplir les nouveaux pixels. Les images vectorielles sont plus résistantes à la mise à l'échelle ; Lors de la modification de la taille de l'image, les formules mathématiques correspondantes peuvent être ajustées.

  • La taille du fichier source des graphiques vectoriels est généralement plus petite, de sorte que les graphiques SVG se chargent plus rapidement que leurs homologues raster et consomment moins de données.
  • Les images SVG sont rendues par le navigateur et peuvent être rendues par programme. Ils peuvent changer de manière dynamique, ce qui les rend particulièrement adaptés aux applications basées sur les données telles que les graphiques.
  • Le fichier image SVG original est sous forme de texte, ce qui le rend accessible et convivial pour les moteurs de recherche.

Dans cet article, vous découvrirez les avantages des formats SVG et comment ils peuvent vous aider à créer des sites Web HTML5.

Les bases du SVG

La création de graphiques SVG utilise un processus complètement différent de la création de fichiers JPEG, GIF ou PNG. Les fichiers JPEG, GIF et PNG sont généralement créés à l'aide d'un programme d'édition d'images, tel qu'Adobe Photoshop. Les images SVG sont généralement créées à l'aide d'une sorte de langage basé sur XML. Il existe des interfaces utilisateur graphiques pour éditer les graphiques SVG qui généreront pour vous le code XML derrière l'image. Toutefois, cet article suppose que vous travaillez directement avec XML. Des informations sur les programmes d'édition d'images SVG peuvent être trouvées dans la section.

Le listing 1 montre un exemple de fichier XML SVG simple qui dessine un cercle rouge avec une bordure noire de 2 pixels.

Listing 1. Fichier XML SVG

Le code ci-dessus produit l'image présentée dans la figure 1.

Figure 1. Cercle rouge avec bordure noire de 2 pixels

Création de formes géométriques de base

Lorsque vous travaillez avec des graphiques SVG, les balises XML sont utilisées pour créer des formes géométriques ; ces éléments XML sont présentés dans le tableau 1.

Tableau 1. Éléments XML pour créer des graphiques SVG

élément de ligne

L'élément line est l'élément graphique le plus simple. Le listing 2 montre comment créer une ligne horizontale.

Listing 2. Création d'une ligne horizontale

Le code présenté dans le listing 2 produit l'image présentée dans la figure 2.

Figure 2. Ligne horizontale simple

La balise racine SVG possède des attributs de largeur et de hauteur qui définissent la zone pouvant être dessinée. Ces attributs agissent de la même manière que les attributs height et width des autres éléments HTML. Dans ce cas, il est établi que la zone de travail occupe tout l'espace disponible.

De plus, cet exemple utilise la balise style. Les graphiques SVG prennent en charge l'application de styles au contenu à l'aide d'une grande variété de méthodes. Les styles de cet article sont inclus pour rendre les images faciles à voir ou lorsque certains attributs, tels que la couleur et l'épaisseur de ligne, sont requis pour le rendu d'un dessin. Plus d'informations sur l'application de styles dans les graphiques SVG peuvent être trouvées dans la section.

Vous pouvez créer une définition de ligne en spécifiant les coordonnées de début et de fin sur les axes X et Y par rapport à l'espace de travail. Les attributs x1 et y1 représentent les coordonnées de début et les attributs x2 et y2 représentent les coordonnées de fin de la ligne. Pour changer la direction du tracé d’une ligne, il vous suffit de changer les coordonnées. Par exemple, en modifiant l'exemple précédent, vous pouvez créer une ligne diagonale comme indiqué dans le listing 3.

Listing 3. Création d'une ligne diagonale

La figure 3 montre la sortie du code présenté dans le listing 3.

Figure 3. Ligne diagonale

élément polyligne

Une ligne brisée est un dessin composé de plusieurs lignes. Le listing 4 montre un exemple de création d'un dessin qui ressemble aux marches d'un escalier.

Le code du listing 4 produit l'image présentée dans la figure 4.

Une polyligne est créée à l'aide de l'attribut points et en définissant des paires de coordonnées X et Y séparées par des virgules. Dans l'exemple présenté, le premier point est défini comme 0,40, où 0 est la coordonnée X et 40 est la coordonnée Y. Cependant, un ensemble de points ne suffit pas pour afficher l'image à l'écran, car cet ensemble indique uniquement le SVG. rendre la position de départ. Vous avez besoin d'au moins deux ensembles de points : un point de départ et un point d'arrivée (par exemple, points="0.40 40.40").

Comme pour le dessin de lignes simples, il n’est pas nécessaire que les lignes soient strictement horizontales ou verticales. Si vous modifiez les valeurs de l'exemple précédent, vous pouvez obtenir des formes irrégulières constituées de lignes, comme dans le Listing 5.

Listing 5. Créer une ligne irrégulière

Le code présenté dans le listing 5 produit l'image présentée dans la figure 5.

Figure 5. Ligne irrégulière

élément rectangulaire

Pour créer un rectangle, il vous suffit de définir sa largeur et sa hauteur, comme indiqué dans le Listing 6.

Listing 6. Créer un rectangle

Le code du listing 6 produit l'image présentée dans la figure 6.

Figure 6. Rectangulaire

La balise rect peut également être utilisée pour créer un carré ; un carré est simplement un rectangle de même hauteur et largeur.

élément de cercle

Le cercle est créé en définissant les coordonnées X et Y du centre et du rayon du cercle, comme indiqué dans le listing 7.

Listing 7. Créer un cercle

Le code du listing 7 produit l'image présentée dans la figure 7.

Figure 7. Cercle

Les attributs cx et cy déterminent la position du centre du cercle par rapport au canevas. Étant donné que le rayon est la moitié de la largeur du cercle, lors de sa détermination, gardez à l'esprit que la largeur totale de l'image sera le double de la valeur que vous spécifiez.

Élément elliptique

Essentiellement, une ellipse est un cercle avec deux rayons spécifiés dans le code, comme le montre le listing 8.

Listing 8. Créer une ellipse

Le code du listing 8 produit l'image présentée dans la figure 8.

Figure 8. Ellipses

Dans ce cas, les attributs cx et cy définissent également les coordonnées du centre par rapport au canevas. Cependant, avec une ellipse, vous définissez un rayon pour l'axe X et un deuxième rayon pour l'axe Y à l'aide des attributs rx et ry.

élément de polygone

Un polygone est une figure géométrique contenant au moins trois côtés. Le listing 9 crée un triangle simple.

Listing 9. Créer un triangle

Le code du listing 9 produit l'image présentée dans la figure 9.

Figure 9. Triangle

Semblable à l'utilisation de l'élément polyligne, les polygones sont créés en définissant des paires de coordonnées X et Y à l'aide de l'attribut points.

En ajoutant des paires de coordonnées le long des axes X et Y, vous pouvez créer des polygones avec n'importe quel nombre de côtés. Par exemple, en modifiant le code de l'exemple précédent, vous pouvez créer un polygone à quatre côtés, comme indiqué dans le listing 10.

Listing 10. Création d'un polygone à quatre côtés

Le code présenté dans le listing 10 produit l'image présentée dans la figure 10.

Figure 10. Polygone à quatre côtés

À l'aide de la balise polygone, vous pouvez également créer des formes géométriques de formes complexes. Le listing 11 crée un dessin d'étoile.

Listing 11. Créer une étoile

Le code présenté dans le listing 11 produit l'image présentée dans la figure 11.

Figure 11. Polygone étoilé

élément de chemin

L'élément chemin est le plus complexe de tous les éléments de dessin, vous permettant de créer des dessins arbitraires à l'aide d'un ensemble de commandes spéciales. L'élément path prend en charge les commandes répertoriées dans le tableau 2.

Tableau 2. Commandes prises en charge par l'élément path

Ces commandes peuvent être utilisées en majuscules ou en minuscules. Si la commande est spécifiée en majuscule, le positionnement absolu est appliqué. Si une commande minuscule est utilisée, le positionnement relatif est appliqué. Fournir des exemples d’utilisation de toutes les commandes dépasse le cadre de cet article. Cependant, vous trouverez ci-dessous quelques exemples illustrant les bases de l'utilisation de ces commandes.

À l’aide de l’élément path, vous pouvez créer n’importe quelle forme géométrique simple à partir des exemples précédents de cet article. Le listing 12 utilise l'élément path pour créer un triangle régulier.

Listing 12. Création d'un triangle à l'aide de l'élément path

Le code présenté dans le listing 12 produit l'image présentée dans la figure 12.

Figure 12. Triangle créé à l'aide de l'élément path

La liste des commandes est définie à l'aide de l'attribut d. Dans cet exemple, le dessin commence au point de coordonnées X 150 et Y 0, défini par la commande de déplacement vers le point (M150 0). Utilisez ensuite la commande pour tracer une ligne jusqu'au point (L75 200). une ligne est tracée jusqu'à un point avec les coordonnées X = 75 et Y = 200. Après cela, une autre ligne est tracée à l'aide d'une autre commande pour tracer une ligne jusqu'à un point (L225 200). Enfin, le motif est fermé à l'aide de la commande snap (Z). Aucune coordonnée n'accompagne la commande Z, puisque pour fermer un chemin, par définition, vous tracez une ligne depuis la position actuelle jusqu'au point de départ du dessin (dans ce cas, le point de coordonnées X = 150, Y = 0).

Le but de l'exemple donné était de vous montrer le concept ; Si vous avez juste besoin de créer un triangle régulier, il est préférable d'utiliser la balise polygone.

Le véritable pouvoir de l'élément path réside dans sa capacité à créer des formes personnalisées, comme le montre le listing 13. Cet exemple est tiré du document du World Wide Web Consortium (W3C). Graphiques vectoriels évolutifs (SVG) 1.1 (2e édition)(voir section).

Listing 13. Création d'une forme personnalisée à l'aide de l'élément path

Le code présenté dans le listing 13 produit l'image présentée dans la figure 13.

Figure 13. Forme personnalisée créée à l'aide de l'élément path

L'élément path peut être utilisé pour créer des conceptions complexes telles que des diagrammes et des lignes ondulées. Notez que l'exemple fourni utilise plusieurs éléments de chemin. Lors de la création de dessins, vous n'êtes limité à aucun élément de dessin dans la balise racine SVG.

Filtres et dégradés

En plus des styles CSS de base utilisés dans la plupart des exemples ci-dessus, les graphiques SVG prennent également en charge l'utilisation de filtres et de dégradés. Dans cette section, vous apprendrez comment appliquer des filtres et des dégradés aux images SVG.

Filtres

Des filtres peuvent être utilisés pour appliquer des effets spéciaux aux images SVG. SVG prend en charge les filtres suivants.

  • feBlend
  • feColorMatrix
  • feComponentTransfer
  • feComposite
  • feConvolveMatrix
  • feÉclairage diffus
  • feDéplacementMap
  • feInondation
  • feFlou gaussien
  • feImage
  • feMerge
  • feMorphologie
  • feDécalage
  • feÉclairage Spéculaire
  • feTile
  • feTurbulence
  • feDistantLight
  • fePointLight
  • feSpotLight

Le listing 14 crée un effet d'ombre portée appliqué à un rectangle.

Listing 14. Création d'un effet d'ombre portée pour un rectangle

Le code présenté dans le listing 14 produit l'image présentée dans la figure 14.

Figure 14. Effet d'ombre portée pour un rectangle

Les filtres sont définis à l’intérieur de l’élément def (abréviation de « définition »). Le filtre dans cet exemple se voit attribuer un identifiant (id) « f1 ». La balise de filtre elle-même possède des attributs pour définir les coordonnées X et Y, ainsi que la largeur et la hauteur du filtre. À l'intérieur de la balise de filtre, vous utilisez les éléments de filtre requis et définissez leurs propriétés sur les valeurs souhaitées.

Une fois qu'un filtre est défini, vous l'associez à un dessin spécifique à l'aide de l'attribut filter, comme indiqué dans . Définissez la valeur de l'URL sur la valeur de l'attribut id attribuée au filtre.

Dégradés

Pente représente une transition progressive d’une couleur à une autre. Il existe deux principaux types de dégradés : linéaires et radiaux. Le type de dégradé appliqué est déterminé par l'élément que vous utilisez. Les exemples suivants montrent comment appliquer des dégradés linéaires et radiaux à une ellipse.

Le listing 15 crée une ellipse avec un dégradé linéaire.

Listing 15. Créer une ellipse avec un dégradé linéaire

Le code présenté dans le listing 15 produit l'image présentée dans la figure 15.

Figure 15. Ellipse à gradient linéaire

Le listing 16 crée une ellipse avec un dégradé radial.

Listing 16. Créer une ellipse avec un dégradé radial

Le code présenté dans le listing 16 produit l'image présentée dans la figure 16.

Figure 16. Ellipse avec dégradé radial

Les dégradés, comme les filtres, sont définis dans l'élément def. Chaque dégradé se voit attribuer un identifiant (id). Les attributs de dégradé (tels que les couleurs) sont définis à l'intérieur de la balise de dégradé à l'aide d'éléments d'arrêt. Pour appliquer un dégradé à une image, définissez la valeur url de l'attribut fill sur l'identifiant (id) du dégradé souhaité.

Texte et SVG

En plus de créer des formes géométriques de base, SVG peut également être utilisé pour générer du texte, comme le montre le listing 17.

Listing 17. Création de texte en utilisant SVG
Je t'aime SVG

Le code présenté dans le listing 17 produit l'image présentée dans la figure 17.

Figure 17. Texte créé avec SVG

Cet exemple crée une phrase I love SVG en utilisant l'élément texte. Lors de l'utilisation de l'élément de texte, le texte réel affiché se situe entre les éléments de texte d'ouverture et de fermeture.

Vous pouvez afficher du texte selon différents axes et même le long de chemins. Dans le listing 18, le texte est affiché selon un chemin en forme d'arc.

Listing 18. Création de texte le long d'un chemin en forme d'arc
J'aime SVG J'aime SVG

Le code présenté dans le listing 18 produit l'image présentée dans la figure 18.

Figure 18. Texte placé le long d'un chemin en forme d'arc

Cet exemple ajoute un espace de noms XML supplémentaire, xlink , à la balise racine SVG. Le chemin utilisé pour archiver le texte est créé à l'intérieur de l'élément def, donc le chemin lui-même n'est pas rendu dans le dessin. Le texte affiché est imbriqué dans un élément textPath, qui utilise l'espace de noms xlink pour faire référence à l'identifiant du chemin souhaité.

Comme pour les autres graphiques SVG, vous pouvez également appliquer des filtres et des dégradés au texte. Le listing 19 applique un filtre et un dégradé au texte.

Listing 19. Création de texte avec filtre et dégradé
J'aime SVG J'aime SVG

Le code présenté dans le listing 19 produit l'image présentée dans la figure 19.

Figure 19. Texte avec filtre et dégradé

Ajout de code SVG XML aux pages Web

Une fois le XML SVG créé, il peut être inclus dans les pages HTML de plusieurs manières. La première méthode consiste à insérer directement le code SVG XML dans le document HTML, comme indiqué dans le listing 20.

Listing 20. Insérer directement du XML SVG dans un document HTML
SVG intégré

Cette méthode est probablement la plus simple, mais elle n’incite pas à la réutilisation. N'oubliez pas que SVG XML peut être enregistré sous forme de fichier avec l'extension .svg. Lorsque vous enregistrez un graphique SVG en tant que fichier .svg, vous pouvez utiliser des éléments embed, object et iframe pour l'inclure dans des pages Web. Le listing 21 montre le code pour intégrer un fichier SVG XML à l'aide de l'élément embed.

Listing 21. Inclure un fichier XML SVG à l'aide de l'élément embed

Le listing 22 montre le code pour inclure un fichier SVG XML à l'aide de l'élément object.

Listing 22. Inclure un fichier XML SVG à l'aide de l'élément object

Le listing 23 montre le code pour inclure un fichier XML SVG à l'aide d'un élément iframe.

Listing 23. Inclure un fichier XML SVG à l'aide d'un élément iframe

Avec l'une de ces méthodes, vous pouvez inclure le même graphique SVG sur plusieurs pages et le mettre à jour en modifiant le fichier .svg d'origine.

Conclusion

Cet article couvre les bases de la création de graphiques à l'aide du format SVG. Vous avez appris à utiliser les éléments géométriques intégrés pour créer des formes géométriques de base, telles qu'une ligne, un rectangle, un cercle, etc. Vous avez également appris à utiliser l'élément chemin pour créer des conceptions complexes en émettant une séquence de commandes. comme se déplacer vers un point, tracer une ligne vers un point et dessiner un arc vers un point. Cet article vous apprend également comment appliquer des filtres et des dégradés aux graphiques SVG, y compris les graphiques contenant du texte, et comment inclure des graphiques SVG dans des pages HTML.

Il existe une balise pour inclure une image à un emplacement spécifique de la page. . Cette balise a un paramètre obligatoire : SRC="", et plusieurs paramètres facultatifs. Le paramètre SRC="" indique au navigateur où rechercher le graphique et doit avoir comme valeur l'URL de la ressource où se trouve le fichier graphique. Dans le cas le plus simple, ce fichier sera placé dans le répertoire racine ou dossier IMG de votre site. Paramètres facultatifs :

Le paramètre ALT="" contient comme valeur une inscription indiquant le contenu de l'image pour les visiteurs dont les navigateurs ne prennent pas en charge les graphiques ou fonctionnent en mode graphique désactivé. La même inscription apparaît lorsque vous passez votre souris sur l'image.

Les paramètres WIDTH="" HEIGHT="" ont comme valeurs les dimensions de l'image en largeur et en hauteur en pixels. Il est conseillé de préciser ces paramètres dans le code de la page afin que le navigateur laisse au préalable de la place pour l'image, puis, au chargement, la page « tressaillira » moins. De plus, ces paramètres peuvent être utilisés pour ajuster la taille de l'image dans la fenêtre du navigateur.

Le paramètre BORDER="" dessine une bordure autour de l'image. La valeur est un nombre indiquant la largeur du cadre en pixels.

Le paramètre ALIGN= détermine la position de l'image sur la page, et peut prendre les valeurs TOP - aligne la bordure supérieure de l'image sur l'élément le plus haut de la ligne courante, TEXTTOP - aligne la bordure supérieure de l'image sur l'élément le plus élevé de la ligne courante. élément de texte le plus élevé de la ligne actuelle, MIDDLE - aligne le milieu de l'image sur la ligne de base de la ligne actuelle, ABSMIDDLE - aligne le milieu de l'image sur le milieu de la ligne actuelle. BASELINE ou BOTTOM - aligne la bordure inférieure de l'image sur la ligne de base de la ligne actuelle, ABSBOTTOM - aligne la bordure inférieure de l'image sur la bordure inférieure de la ligne actuelle, HSPACE= - détermine le retrait horizontal, VSPACE= - détermine le retrait vertical.

Syntaxe des balises :

Téléscripteur

La ligne courante est spécifiée par la balise .

Les attributs de cette balise sont bgcolor - couleur d'arrière-plan de la ligne courante, height - hauteur de la ligne, width - largeur de la ligne.

Direction - définit la direction du mouvement de la ligne rampante - direction="gauche" (droite, haut, bas) - mouvement vers la gauche (droite, haut, bas).

Comportement - comportement de la ligne - behavior="scroll" (diapositive, alterné). Défilement - défilement normal (vous n'avez pas besoin de le spécifier, c'est la valeur par défaut)



Slide - défilement avec un arrêt, la ligne court jusqu'au bord et s'arrête. Si vous utilisez le paramètre loop simultanément avec behavor="slide", la ligne défilera le nombre de fois défini et s'arrêtera au bord. Alterné - la ligne se déplacera d'un bord à l'autre.
Scrollamount - vitesse de déplacement de la ligne, scrollamount="1". Peut prendre des valeurs de 1 à 10. 1 est le mouvement le plus lent, 10 est le mouvement le plus rapide.

Syntaxe des balises : texte

Les navigateurs Web modernes peuvent lire des fichiers vidéo et audio dans divers formats. Pour ce faire, ils utilisent des lecteurs intégrés (plug-in, contrôles ActiveX) ou des programmes de lecture externes. Vous pouvez insérer du son ou de la vidéo dans un document HTML à l'aide de différentes balises :

- pour insérer un fond sonore ;

- insérer une vidéo au format AVI ;

- pour insérer des fichiers audio et vidéo ;

- pour insérer des fichiers audio et vidéo.

Lorsque vous décidez d'insérer de l'audio et/ou de la vidéo dans un document HTML, gardez à l'esprit que les fichiers correspondants sont assez volumineux. Les fichiers les plus populaires sur Internet sont désormais les fichiers MP3, WMA, AIFF, AU, RealAudio (avec les extensions ra et ram), MP4, les fichiers audio MIDI et les formats vidéo MPEG et MOV. Le format audio WAV et le format vidéo AVI sont rarement utilisés sur Internet.

(Article de synthèse suite à la conférence sur le développement de logiciels à Ekaterinbourg et autres présentations. Version vidéo du rapport à Ekaterinbourgvoir sur techdays.ru )

Que sont HTML5 Canvas et SVG ?

Toile HTML5

– l'élément est un canevas pour dessiner des graphiques raster. En fait, il s'agit d'un bloc vide de dimensions données sur lequel vous pouvez vous appuyer à l'aide d'API spéciales pour JavaScript.

L'API comprend 45 méthodes spéciales et 21 attributs utilisés pour afficher des primitives graphiques, définir des styles, des transformations, accéder à des pixels individuels et projeter des images et des vidéos.

Moi-même L'élément est défini directement dans la spécification HTML5. L'API correspondante est décrite dans un document séparé - HTML Canvas 2D Context.

SVG

La musique peut être amusante

Magnifique jeu de visualisation musicale et graphique (http://musiccanbefun.edankwan.com/).

Exemples de diagrammes en SVG

Schéma du squelette humain, du système périodique d'éléments chimiques et du système respiratoire (http://ie.microsoft.com/testdrive/Graphics/RealWorldDataAndDiagrams/Default.xhtml).

Cartes Yandex

Un exemple plus proche de la vie réelle est celui du dessin d'itinéraires à l'aide de SVG (si le navigateur le prend en charge). Voir aussi la conférence « Cartes et SVG » de notre camp HTML5.

Plus d'exemples:

  • Beauty of the Web http://www.beautyoftheweb.com/ – de vrais sites du monde réel
  • Dev : unplugged http://contest.beautyoftheweb.com/ – projets participant au concours d'applications HTML5

Différence entre Canvas et SVG

Dans divers scénarios, Canvas ou SVG peuvent être mieux adaptés au rendu graphique dynamique - nous reviendrons sur cette question à la fin. Pour l’instant, regardons les principales différences entre l’un et l’autre :

Toile SVG
Format Trame Vecteur
Mise à l'échelle
Accéder

Accès individuel aux pixels (RGBA)

Accéder aux éléments individuels (DOM)

Indexabilité et accessibilité

Seul le raster final est visible (vous ne pouvez pas sélectionner de formes, de texte, etc.) - mauvais pour l'accessibilité

Vous pouvez visualiser la structure (par exemple, extraire tout le texte)

Stylisation

Les styles visuels sont définis lors du rendu via l'API

Les styles visuels sont définis par des attributs, vous pouvez inclure du CSS

La programmation

API JS pour travailler avec des primitives

DOM pour travailler avec des éléments

Mise à jour

Pour mettre à jour - dessiner ou redessiner complètement

Il est possible de modifier des éléments individuels

Événements

Il n’existe pas de moyen simple de gérer les événements de la souris. Les objets sous le curseur doivent être identifiés manuellement.

Les événements de souris sont facilement distribués via le DOM et traités automatiquement.

Intégration de codes

Code JS séparé de Canvas

Vous pouvez inclure JS à l'intérieur

Ces différences doivent être prises en compte lors de l'utilisation de l'une ou l'autre technologie de visualisation de données. Par exemple, dessiner un graphique d'une fonction peut être plus facile avec Canvas, tandis qu'afficher des info-bulles (identifiant l'objet sous le pointeur de la souris) est plus facile avec SVG.

Dans la pratique, cependant, il existe déjà un certain nombre de bibliothèques prêtes à l'emploi pour la visualisation de données qui neutralisent en partie ces différences.

Je n'entrerai pas dans les bases du travail avec chacune des technologies ; en guise d'introduction, je recommande le rapport de Vadim Makeev (Opera) du HTML5 Camp « Dynamic Graphics : Canvas and SVG ».

Voir également les rapports MIX 2011 :

Traitement des images avec Canvas

L'une des caractéristiques notables de Canvas est que cette technologie permet d'accéder pixel par pixel aux données affichées et de projeter divers éléments graphiques, notamment vidéo, sur le canevas.

Un bon exemple de cas où cela est nécessaire est une tâche de traitement/analyse d’image.

Processing.js propose deux approches pour décrire la visualisation : le code intermédiaire, qui est ensuite analysé par la bibliothèque elle-même (dans un fichier séparé ou à l'intérieur d'une page) et le code JavaScript explicite.

Par exemple, pour dessiner une fractale d'ensemble de Mandelbrot, vous pouvez utiliser à la fois l'option indiquée sur la page avec l'exemple correspondant et le code JavaScript suivant :

varxmin = -2,5 ; var ymin = -2 ; var wh = 4 ; function sketchProc(processing) ( traitement.setup = fonction () ( traitement.size(200, 200); traitement.noLoop(); ); traitement.draw = fonction () ( traitement.loadPixels(); var maxiterations = 200; var xmax = xmin + wh ; var ymax = ymin + wh ; var dx = (xmax - xmin) / (traitement.largeur) ;< processing.height; j++) { var x = xmin; for (var i = 0; i < processing.width; i++) { var a = x; var b = y; var n = 0; while (n < maxiterations) { var aa = a * a; var bb = b * b; var twoab = 2.0 * a * b; a = aa - bb + x; b = twoab + y; if (aa + bb >16.0) ( pause ; ) n++; ) if (n == maxitérations)processing.pixels.setPixel(i+j*processing.width, 0); sinon traitement.pixels.setPixel(i+j*processing.width, traitement.color(n*16 % 255)); x += dx; ) y += dy; ) traitement.updatePixels(); ); ) var canevas = document.getElementById("myCanvas" ); var p = nouveau traitement (canvas, sketchProc);

Vous pouvez l'essayer vous-même ici : http://silverbook.ru/projects/html5datavisualization/demo3-processingjs.htm (copiez le code, collez-le dans la console et exécutez).

Boîte à outils JavaScript InfoVis (JIT)

Pour afficher les données, JIT prend les valeurs brutes au format JSON :

var json = ( "étiquette" : ["étiquette" , "étiquette B" , "étiquette C" , "étiquette D" ], "valeurs" : [ ( "étiquette" : "date A" , "valeurs" : ) , ( "étiquette" : "date B" , "valeurs" : ), ( "étiquette" : "date E" , "valeurs" : ), ( "étiquette" : "date F" , "valeurs" : ), ( "étiquette" : "date D" , "valeurs" : ), ( "étiquette" : "date C" , "valeurs" : )] ); var pieChart = new $jit.PieChart(( injectInto : "infovis" , animer : true , offset : 30, sliceOffset : 0, labelOffset : 20, type : "stacked:gradient" , showLabels:true , resizeLabels : 7, Label : ( type : "Native" , taille : 20, famille : "Arial" , couleur : "white" ), Astuces : ( activer : true , onShow : fonction (tip, elem) ( tip.innerHTML = " " + nom.elem + ": " + elem.value; ) ) ));

appelez simplement le rendu :

PieChart.loadJSON(json);

jQuery Sparklines

Visualisation sur une carte en SVG

Passons au SVG et commençons par un exemple simple. Imaginez que vous deviez afficher des données sur une carte de régions, quelle est la manière la plus simple de le faire ?

Si vous avez une carte prête à l'emploi au format SVG (j'ai pris la carte de la Russie sur le site Wikipédia), alors cela se fait très simplement - il suffit que chaque région ait son propre identifiant unique à l'intérieur du document SVG, alors insérez la carte sous forme de svg en ligne et coloriez-la avec un simple code dans la couleur souhaitée :

var SverdlovskOblast = document.getElementById("SverdlovskOblast" ); SverdlovskOblast.style.fill = "#fe3300" ;

Si vous faites la même chose en boucle, vous pouvez alors colorer non seulement une zone, mais une région entière ou même un pays entier :

var data = [(id : "KurganOblast" , valeur : 30), (id : "SverdlovskOblast" , valeur : 200), (id : "TyumenOblast" , valeur : 75), (id : "KhantiaMansia" , valeur : 100 ), (id : "YamaloNenetsAutDistrict" , valeur : 20), (id : "ChelyabinskOblast" , valeur : 150)] ; pour (var je = 0; je< data.length; i++) { var item = data[i]; var region = document.getElementById(item.id); region.style.fill = RGBtoHex(item.value, 0, 0); }

Bibliothèques pour visualiser des données en utilisant SVG

Comme je l'ai déjà dit, Canvas et SVG conviennent tous deux pour résoudre le problème traditionnel de la visualisation de données numériques sous forme de graphiques et de diagrammes. Dans les deux cas, cela peut être fait assez facilement en utilisant les bibliothèques appropriées.

Nous avons déjà regardé des exemples avec Canvas, regardons maintenant plusieurs bibliothèques pour travailler avec SVG. (Ce n'est pas non plus une liste exhaustive, mais des solutions populaires et de très haute qualité.)

Raphaël

Pour ajouter un simple camembert, le code suivant suffit :

var r = Raphaël("graphique" , ​​640, 480); var tarte = r.g.piechart(320, 240, 100, );

En quelques étapes supplémentaires, vous pouvez ajouter une légende, des légendes de graphique et des info-bulles interactives :

var r = Raphaël("graphique" , ​​640, 480); r.g.txtattr.font = "12px "Fontin Sans", Fontin-Sans, sans empattement"; rg.text(320, 100, "Graphique à secteurs interactif" ).attr(("font-size" : 20)); var tarte = r.g.piechart(320, 240, 100, ,
(légende : ["%%.%% – Enterprise Users" , "IE Users" ], legendpos : "west" ,
href : ["http://raphaeljs.com" , http://g.raphaeljs.com]});
pie.hover(function () ( this .sector.stop(); this .sector.scale(1.1, 1.1, this .cx, this .cy); if (this .label) ( this .label.stop(); this .label.scale(1.5); this .label.attr(("font-weight" : 800) ) ), function () ( this .sector.animate((scale: ), 500, "bounce" ) ; si (this .label) ( this .label.animate((scale: 1), 500, "bounce" ); this .label.attr(("font-weight" : 400)); ) );

D'autres types de graphiques peuvent être produits de la même manière en utilisant des méthodes appropriées. Voir les exemples directement sur le site de l'extension http://g.raphaeljs.com/

HighchartsJS

L'API de la bibliothèque facilite la génération d'un graphique à l'aide de données en JSON :

var chart1 = new Highcharts.Chart(( chart: ( renderTo: "charts" , defaultSeriesType: "bar" ), title: ( text: "Fruit Consumption" ), xAxis: ( catégories: ["Pommes" , "Bananes" , "Oranges" ]), yAxis: ( titre: ( texte: "Fruit mangé" ) ), série: [( nom: "Jane" , données: ), ( nom: "John" , données: )] ));

Avec un script un peu plus complexe, vous pouvez spécifier des détails supplémentaires, par exemple afficher une légende, configurer des info-bulles :

var chart = new Highcharts.Chart(( chart: ( renderTo: "charts" , defaultSeriesType: "area" , spacingBottom: 30 ), title: ( texte: "Consommation de fruits *" ), sous-titre: ( texte: "* La consommation de banane de Jane est inconnue", flottant : vrai , aligner : "droite" , verticalAlign : "bottom" , y : 15 ), légende : ( mise en page : "vertical" , aligner : "gauche" , verticalAlign: "top" , x : 150, y : 100 , flottant : true , borderWidth : 1, backgroundColor : "#FFFFFF" ), xAxis: ( catégories : ["Pommes" , "Poires" , "Oranges" , "Bananes" , "Raisins" , "Prunes" , "Fraises" , "Framberries" ] ), yAxis : ( titre : ( texte : "Y-Axis" ), étiquettes : ( formateur : fonction () ( renvoie cette .valeur ; ) ) ), info-bulle : ( formateur : fonction () ( renvoie " "+ce.série.nom+"
" + this .x +": " + this .y; ) ), plotOptions : ( zone : ( fillOpacity : 0.5 ) ), série : [( nom : "John" , données : ), ( nom : "Jane" , données: )] ));

Si nécessaire, vous pouvez remplacer les styles par défaut par les vôtres.

Faut-il choisir Canvas ou SVG ?

Comme le montrent les exemples ci-dessus, les deux technologies sont souvent adaptées aux tâches de visualisation de données. Beaucoup de choses se font de la même manière. Dans les cas où une sortie pixel par pixel est nécessaire, Canvas est évidemment mieux adapté. Lorsque le diagramme se décompose en objets individuels dans lesquels vous devez maintenir l'interactivité, SVG est mieux adapté.

La toile c'est mieux
  • Modification de graphiques raster
  • Ajouter des effets aux graphiques/vidéos
  • Génération de graphiques raster (visualisation de données, fractales, graphiques de fonctions)
  • L'analyse d'image
  • Graphiques du jeu (sprites, arrière-plan, etc.)
SVG c'est mieux
  • Interfaces évolutives
  • Interfaces interactives
  • Diagrammes, diagrammes
  • Édition d'images vectorielles

Sous forme graphique, cela peut être représenté comme suit :

Enfin, un autre aspect important qu’il est également important de prendre en compte lors du choix d’une technologie est la performance de rendu lors de l’utilisation de Canvas et SVG :

En pratique, Canvas fonctionne mieux lorsque la zone de rendu est petite et sur un grand nombre d'objets ; en SVG, il est mieux adapté lorsqu'une mise à l'échelle ou un affichage sur un grand écran est nécessaire et lorsqu'il n'y a pas trop d'objets affichés à la fois.

La plupart des pages Web contiennent des graphiques. Il vous permet de présenter les informations de manière colorée et claire. Dans de nombreux cas, il est préférable de montrer une image plutôt que de donner une longue description textuelle.
Il existe deux manières de placer des graphiques sur une page :

  • insertion d'images individuelles;
  • remplir l'arrière-plan avec une image.

Dans tous les cas, l'image graphique est extraite du fichier.

L'insertion d'une image graphique à partir d'un fichier au format graphique sur une page se fait à l'aide de la balise (de l'anglais, image - image) indiquant l'adresse du fichier comme argument de l'attribut SRC :

L'adresse du fichier graphique est soit une URL, soit un nom de fichier, éventuellement accompagné d'un chemin. Par exemple, pour afficher le fichier graphique logotip.jpg, vous devez écrire la balise

Pour augmenter la vitesse de transfert d'une image graphique dans une balise vous pouvez utiliser l'attribut LOWSRC (paramètre supplémentaire), qui prend l'adresse du fichier graphique comme argument. Vous pouvez créer deux fichiers graphiques : l'un (par exemple, disons logotip.jpg) contient une image haute résolution et l'autre (par exemple, logotip.gif) contient une image basse résolution. Puis tague

Demande au navigateur de télécharger d’abord le fichier logotip.gif, puis de le remplacer par le fichier logotip.jpg dès sa réception.
Une autre façon d'accélérer le chargement des graphiques consiste à spécifier les dimensions de la zone rectangulaire dans laquelle le graphique sera placé à l'aide des attributs WIDTH et HEIGHT, mesurés en pixels. Si vous spécifiez ces attributs, le navigateur allouera d'abord de l'espace pour les graphiques, préparera la mise en page du document, affichera le texte, puis chargera les graphiques. Notez que le navigateur compresse ou étire l'image pour l'adapter à la taille d'image spécifiée. Un exemple de spécification des dimensions d'une image :

Les graphiques sont généralement utilisés en conjonction avec du texte, le défi d'aligner le texte et les graphiques se pose donc. Ce problème est résolu en utilisant l'attribut ALIGNERétiqueter en utilisant divers arguments. Par exemple, nous pourrions souhaiter que le texte entoure une image vers la droite ou la gauche. Habituellement, l’image est étroitement intégrée au texte, ce qui peut être laid. Pour éviter cela, vous pouvez définir des marges vides autour de l'illustration. Les champs sont créés à l'aide d'attributs VSPACE pour les marges supérieure et inférieure et НSPACE pour les marges latérales de la balise . Les arguments de ces attributs sont spécifiés sous forme de nombres qui spécifient la taille des champs en pixels. Pour annuler l'habillage du texte autour des graphiques, utilisez la balise
.
La balise suivante définit les graphiques du fichier logotip.jpg pour qu'ils s'ajustent à droite (l'image sera à gauche du texte) :

Si vous souhaitez placer une image à droite du texte, vous avez besoin de l'attribut ALIGNER assigner un argument DROITE:

Pour définir les marges autour de l'image, vous devez écrire une balise comme :

Ici, les nombres 20 et 10 déterminent la taille des champs.
Prenons un exemple d'utilisation combinée de graphiques et de textes. Ouvrez le Bloc-notes (éditeur de texte Bloc-notes) Windows. Écrivez-y du code HTML en utilisant les balises décrites ci-dessus. Vous trouverez ci-dessous un programme qui génère du texte et des graphiques. Vous pouvez utiliser n’importe lequel des fichiers dont vous disposez comme fichier graphique. Le fichier utilisé ici est logotip.gif.


Exercice 1



<Н1>Le texte s'enroule autour des graphiques à droite
Ceci est un exemple d’utilisation conjointe de texte et de graphiques.
Le texte du programme HTML peut être écrit dans n'importe quel éditeur de texte. Cela utilise des balises de balisage de texte.

Ce texte est affiché à partir d'un nouveau paragraphe. Pour ce faire, nous avons utilisé une balise spéciale.


Essayez de redimensionner la fenêtre de votre navigateur. Remarquez comment la disposition du texte change.

Riz. 657. Le texte entoure l'image de droite

De larges possibilités de positionnement précis des images (ainsi que d'autres éléments) sur la page offrent les tables Et modes. Ces éléments HTML seront discutés plus tard. Par exemple, vous pouvez définir un tableau sans cadres visibles, et placer des images, textes et autres éléments dans les cellules de ce tableau.

mob_info