Timeline.js, une lib pour tracer des graphes en JavaScript
Posted on 09 April 2014 in Dev • 2 min read
Pour un projet (dont je reparlerai sûrement bientôt, au passage), j’ai eu besoin de tracer des graphes en JavaScript. Le moyen le plus simple, sachant qu’en plus j’avais besoin d’un peu d’interactivité, était d’utiliser du SVG et de le générer directement en JavaScript.
J’ai donc pensé utiliser une bibliothèque déjà écrite… et c’est là que le bât blesse… On trouve de très bonnes bibliothèques, pour faire de très beaux graphes avec des animations et tout et tout, mais rien de léger, simple et fonctionnel. Je voulais juste tracer des graphes en SVG (potentiellement plusieurs superposés) et avoir des actions personnalisables au clic sur un point. Pas d’animations, ça ne sert à rien, pas de tracés de multiples objets différents en SVG, juste des graphes… Alors, pourquoi charger 30ko de jQuery plus minimum 10ko de Javascript supplémentaires (ça c’était uniquement pour la plus légère, la moyenne était plutôt autour de 70ko supplémentaires) juste pour faire ça ?!?
Du coup, j’ai écrit une petite bibliothèque JavaScript KISS pour tracer des graphes en SVG. Vous pouvez mettre autant de graphes que vous voulez, spécifier le remplissage souhaité, le type de tracé souhaité, et comme c’est du SVG, c’est très simple de binder des événements JavaScript sur vos points (la bibliothèque supporte du clic par défaut, et il y a une petite animation au survol avec une légende). Le tout pour 23ko non compressé (soit moins que jQuery seule, soit dit en passant), et 15ko une fois minifiée, sans aucune dépendance externe. Ça devrait marcher sans problème sur tous les navigateurs décents (pas de fallback compliqué sur du canvas ou autre implémenté par contre) et on peut même descendre sous les 10ko en obfuscant un peu le code.
Voilà, je ne sais pas si ça servira à quelqu’un, mais on sait jamais. Du coup, si ça vous intéresse, ça se récupère ici sur Github et il y a mêmes quelques exemples de démos ici. Le code n’est sûrement pas parfait, mais ça devrait être fonctionnel (et n’hésitez pas à signaler les issues que vous rencontrez). Comme toujours, c’est sous licence SODAWARE : en gros, vous en faites ce que vous voulez, comme vous voulez, mais c’est quand même cool de dire où vous l’avez trouvé (et c’est quand même vraiment pas cool de s’approprier le travail des autres…) et si vous trouvez ma petite bibliothèque utile / fun / cool / whatever et que par hasard on se croise (ou non), vous pouvez me payer un soda (ou plus) :). Et surtout, n’hésitez pas à faire des pull requests ou à me faire signe si vous vous en servez, que je vois tout ce qu’on peut faire avec :)