Ayant trouvé une présentation didactique des malheurs de la centrale de Fukushima (au Japon), j'ai cherché à comprendre comment réaliser de tels documents. Ne le sachant pas, j'ai interrogé autour de moi.
C'était "du Flash" (quoique l'on mette derrière ces mots)... et je n'ai pas l'outil qui permet d'en fabriquer, ni l'intention de l'utiliser non plus.
Ce qui suit est un parcours assez erratique à la découverte de solutions de remplacement libres.Comme la messagerie électronique a été utilisée pour les échanges, le texte ci-dessous reprend largement le contenu de ceux-ci.
On va passer par différents endroits, donc XML et SVG (pléonasme diront certains).
Le chemin est ardu : il faut lire de nombreux documents, beaucoup de code.
Le document qui a tout fait démarrer
Ce qui suit se rapporte au contenu de l'animation située ici :
http://www.lemonde.fr/japon/infographie/2011/03/14/le-scenario-de-la-catastrophe-de-fukushima_1493124_1492975.html (je ne m'intéresse qu'au seul cadre intitulé : le scénario de l'accident, qui est accompagné de 5 boutons à cliquer).Il faut activer le Javascript pour que cela marche.
Une telle infographie est un moyen d'explication efficace quand on s'adresse à un public qui a "l'intelligence visuelle".
Ceci étant, imaginons que nous ayons à réaliser une telle infographie (une commande venue d'un journal qui paie bien !!!).
Quels outils pour ?
- les dessins : !Draw, Inkscape,Open Office Draw, ...
- enchaîner les images et le texte :
+ powerpoint ou open office (mais cela ne marchera pas dans le navigateur)
+ Python (je saurais faire sous forme de vidéo, ou dans une fenêtre en local,
mais pas au sein du navigateur)
+ BBC Basic (mais limitations avec le navigateur ???)
+ Javascript (je crois que c'est ce qui est utilisé, mais je ne saurais pas faire)
En application, voici une page qui relate l'accident de Tchernobyl :
http://www.astrosurf.com/luxorion/tchernobyl.htm
Elle contient un joli dessin qui ne demande qu'à être animé.
Vous feriez comment ?
Résumé des réponses
Basic et Python : non, pour des raisons de sécurité.
Javascript : c'est ce qui convient.
Malheur : c'est du flash (ce que je n'avais pas vu au début).
Un premier essai avec javascript
Le javascript, quand ce n'est pas un machin à faire suer le monde, a des côtés amusants.Dans l'exemple suivant, il est utilisé comme substitut au basic, dans un jeu des couleurs du style "drapeaux nationaux".
L'avantage (???) est que le navigateur internet est utilisé comme terminal graphique universel. Que la machine cible soit un Mac, un Pétsé, un Cray (???) le résultat sera le même... sous réserve que la machine cible dispose d'un navigateur avec javascript.
Voir : http://lerautal.lautre.net/journal/javascript/3couleur.html
Si vous voulez lire le code, il faut le charger dans un éditeur.
Page de documentation sur JS : http://www.java2s.com/Code/JavaScriptReference/CatalogJavaScriptReference.htm
Exemple de code d'appel pour la gestion du rectangle de gauche (les signes plus grand et plus petit sont enlevés pour éviter les problèmes d'affichage :
Déclaration de l'identifiant pour le rectangle de gauche :
Code javascript faisant le travail :
function function1gauche() { document.all.un.bgColor = "black"; } function function2gauche() { document.all.un.bgColor = "blue"; } function function3gauche() { document.all.un.bgColor = "green"; }
Rien de bien malin ici, mais au moins la démonstration qu'on pouvait le faire au sein du navigateur.
Positionnement avec les CSS
En HTML (avec styles) il est devenu possible de positionner précisément des "choses".Voici une petite page "pédagogique" qui ne contient que du HTML (et même pas encore de javascript). http://lerautal.lautre.net/journal/javascript/position.html
Le code source, très simple est ici pour les curieux :
Une imitation minimaliste
Pour mémoire : il s'agit d'imiter l'animation Flash du Monde sur la panne de la centrale de Fukushima.Un dessin original a été fait avec Inkscape.
Le "démonstrateur" ne contient que 3 pages en HTML avec CSS (mais ni flash ni javascript)
Il ne contient que des éléments graphiques (manque de temps pour le reste).
Voir ici :
http://lerautal.lautre.net/journal/javascript/simulation10.html
Visiblement, on peut déjà faire beaucoup ainsi.
Le code est facile à visualiser par (affichage / code source de la page) dans Firefox.
SVG, XML sont-ils la réponse ?
La page suivante est importante : elle montre qu'à partir d'un dessin au format SVG, d'un fond en PNG et de code Javascript il serait possible de reconstituer un équivalent de l'animation flash.
http://www.carto.net/svg/samples/canvas.shtmlCeci étant, il y a beaucoup à faire pour comprendre puis transposer.
Ce que j'ai compris :
- Une image SVG est composée de différents objet graphiques clairement
identifiés dans le code de la page.
- Avec Javascript, on peut agir pour afficher ou non tel élément graphique, reconstituant ainsi
l'équivalent de calques affichés (ou non).
Découverte du SVG seul
Après ces quelques essais, un peu au hasard, il devient évident que l'on ne peut plus différer l'apprentissage "d'un peu de SVG", puisque c'est sur lui que repose le remplacement de Flash.
Dans ce qui suit, des animations faites uniquement avec SVG vont être montrées. Mais avant, une mise en garde :
Certains navigateurs tardent à s'adapter aux possibilités de SVG.
Les seuls efficaces sont actuellement les dernières versions de :
Opera, Firefox (4), Chromium. Je n'ai pas pu essayer Internet Explorer
(je suis sous Linux), mais les versions anciennes ne marcheront pas.
Le triangle qui suit une courbe
Rappel : utiliser Opera, Firefox (4), ChromiumCommençons par quelque chose d'étonnant :
http://lerautal.lautre.net/journal/sansflash/aiguille.svg
Remarquer en passant, puisque c'est du SVG, que l'on peut zoomer/dézoomer sans perte de qualité. Etonnant.
Si maintenant on examine le code source de la page, il y a matière à s'instruire.
Cette partie définit un en-tête standard pour le format SVG.
Quelques définitions supplémentaires, en particulier les dimensions
de la zone d'affichage.
Ce qui suit permet de réaliser le dessin et l'animation.
D'abord, le tracé du cadre du dessin :
Puis la première courbe :
Celle-ci est définie par la position de ses extrémités et puis par les coordonnées des
"poignées" qui étirent la courbure (courbe dite "de Bézier").
Puis la seconde courbe :
Celle-ci est définie par la position de ses extrémités et puis par les coordonnées des
"poignées" qui étirent la courbure (courbe dite "de Bézier").
Ce qui suit réalise le "miracle" de l'animation : on commence par définir un triangle puis on lui donne l'ordre de suivre la courbe appelée path1.
On fait la même chose pour le second triangle :
Et on finit la définition du fichier SVG :
Expérimentation complémentaire
Une courbe a été dessinée à la main avec Inkscape et le code adapté pour réaliser de nouveau le déplacement du triangle.http://lerautal.lautre.net/journal/sansflash/aiguille2.svg
Premier essai de rotation
Le mieux est d'aller voir la petite démonstration suivante :
http://lerautal.lautre.net/journal/sansflash/rotation1.svg
Attention : navigateur Chromium ou Opéra récents.
Le code source du fichier SVG est très simple et assez facile à comprendre.
D'abord l'en-tête du fichier :
Ensuite, on définit un rectangle coloré :
Maintenant, les définitions qui provoquent le mouvement :
Enfin, les balises de "fin de balisage" qui complètent celles qui ont été "ouvertes" (analogie avec les parenthèses ouvrant/fermant).
Une illustration plus jolie de la rotation : le moulin à vent
Pour commencer, aller voir l'image animée suivante :
http://lerautal.lautre.net/journal/sansflash/moulin.svg
Attention : navigateur Chromium ou Opéra récents.
L'image comprend deux éléments :
- l'un est fixe : la tour du moulin
- l'autre tourne : les ailes.
Un résumé du code source est présenté ci-dessous.
Définition de la tour du moulin :
La définition de la tour est contenue dans la zone comprise entre
"path" et "fin de path". L'élément porte un nom qui permet de faire
appel à lui en cas de besoin : id="path2999"
Le path en mis dans une boîte de "hiérachie supérieure" par usage de la balise "g"
Cette "super boîte" porte aussi un nom : id="layer1".
Elle est positionnée de façon relative sur le dessin par "translate(....)".
Les ailes du moulin : on retrouve une logique comparable à ce qui a été expliqué plus haut pour le carré tournant.
Le seul point qui paraît compliqué est le système de coordonnées relatives associé à "translate".
SVG seul et interaction avec la souris
On va utiliser ici la capture de l'évènement "mouseover", géré par SVG : le fait que
le curseur de la souris passe au-dessus (ou sorte de) d'une zone géométrique définie.
Dans les illustrations suivantes, la zone de référence est un rectangle.
Voici d'abord une illustration simple :
http://lerautal.lautre.net/journal/sansflash/mouseover.svg
Pour interagir, amener le curseur de la souris au-dessus du rectangle jaune (ou rose).
Attention : navigateur Chromium ou Opéra récents.
Voici quelques éléments pour comprendre le code (celui-ci n'est présenté qu'en partie, mais on peut le capturer à partir de l'adresse http).
Définition des dimensions de l'image :
Positionnement du premier bouton, couleur et changement de couleur
en cas de "mouseover". Le bouton est positionné par "translate(...)"
et un complément de décalage est ajouté par y="0" x="50".
Le bouton possède un identifiant et, en cas de "mouseover", il transmet le message
"hint_button".
Les deux "animateColor" décrivent le temps de réaction ainsi que les
changements de couleur en cas de "survol de la zone" (ou de fin de celui-ci).
Ici, quelques nouveautés :
style="display:none" qui déclare que, sans message reçu,
le rectangle ne s'affiche pas.
begin=hint_button.mouseover et hint_button.mouseout correspondent à la réception
des messages venant de la zone ci-dessus.
from="none" to="block" et from="block" to="none" sont des instructions antagonistes qui
expliquent le comportement du rectangle : apparition ou disparition.
Relu avec attention, le code devrait vous paraître compréhensible.
Deux illustrations de ce même procédé
D'abord un dispositif pédagogique pour découvrir le vocabulaire
relatif aux constituants d'une église.
C'est très simple, le code ne fait que 6,3 ko (image et interaction).
C'est un exercice à terminer...
http://lerautal.lautre.net/journal/sansflash/eglisebouton1.svg
Une autre illustration ébauche l'apprentissage du vocabulaire anglais de la tête humaine. Le dessin complet a été réalisé avec Inkscape, mais seules deux interactions sont mises en place.
Voir ici :
http://lerautal.lautre.net/journal/sansflash/tete.svg
Compléments pour continuer à avancer
Maintenant qu'un minimum de savoir faire et de compréhension est acquis,
il convient de réfléchir et d'arrêter de partir dans tous les sens :
le code SVG ne me fait plus peur.
Encore faut-il disposer d'une documentation fiable ainsi que d'exemples illustrant
l'utilisation de la syntaxe SVG.
Quelques URL pour se documenter et apprendre
http://svground.free.fr/index.php | Documentation en français, illustrée d'exemples. |
http://pilatinfo.org/routines/couleurs.php3 | Code des couleurs utilisables. Bien utile à l'usage. |
http://www.yoyodesign.org/doc/w3c/svg1/indexlist.html | Une référence complète en français |
Réaliser des dessins simples
Habituellement, j'utilise le logiciel libre Inkscape qui présente
de nombreuses qualités. Il a le mérite, en plus, d'être disponible pour
Windows, Mac OS X et Linux.
Voir par exemple ici :
http://fr.wikipedia.org/wiki/Inkscape
Quand on veut récupérer le code SVG pour le modifier à la main, il faut penser
à l'enregistrer au format "SVG simple" et non en "Inkscape SVG".
Ceci étant, on peut rechercher un outil plus simple, générant directement
du code SVG simple. Un tel outil existe sur le web, et il est "proprement miraculeux"
pour plusieurs raisons :
- il permet de zoomer en ligne pour vérifier tout de suite
- le code source SVG du dessin que l'on réalise peut être étudié en temps réel, voire
modifié à la main.
Cet outil s'appelle SVGedit. Il est accessible en ligne ici, mais on
peut aussi l'installer en local. Le code source étant disponible on peut
le lire et essayer de le comprendre (c'est du SVG + javascript).
http://svg-edit.googlecode.com/svn/branches/2.5.1/editor/svg-editor.html
Quelques vidéos, en toutes langues accessibles via Youtube en utilisant "svgedit" comme élément de recherche.
Autre éléments de réflexion, diverses pistes
Et maintenant ?Une page signalée par Bruno, récapitulant des concepts et illustrations autour de SVG,
Inkscape, Javascript, Ajax... En anglais hélas pour certains.
http://wiki.inkscape.org/wiki/index.php/Animation-%28Timeline%29
Très "nourrissant"... ne pas s'y noyer...
Une piste de travail en forme d'interrogation, venue de Mossoft, relative à l'application de
SVG + Javascript en substitution de Flash pour réaliser de petit jeux :
http://jeux-flash.jeu-gratuit.net/jeux_inclassable/210.html
tu fais pareil en pas flash ?
C'est tout pour le moment...