J'ai construit un moteur de visualisation de données analytiques pour Canvas et on m'a demandé d'ajouter un survol des éléments de données sous forme d'info-bulle pour afficher des métriques détaillées pour le point de données sous le curseur.
Pour les simples diagrammes à barres et de Gaant, les graphiques arborescents et les cartes de nœuds avec de simples zones carrées ou des points d'intérêt spécifiques, j'ai pu mettre cela en œuvre en superposant des DIV absolument positionnés avec des attributs :hover, mais il y a des visualisations plus compliquées comme des camemberts et un rendu de flux de trafic qui a des centaines de zones séparées définies par des courbes de Béziers.
Est-il possible d'attacher une superposition, ou de déclencher un événement lorsque l'utilisateur passe la souris sur un chemin fermé spécifique ?
Chaque zone pour laquelle le survol doit être spécifié est définie comme suit :
context.beginPath();
context.moveTo(segmentRight, prevTop);
context.bezierCurveTo(segmentRight, prevTop, segmentLeft, thisTop, segmentLeft, thisTop);
context.lineTo(segmentLeft, thisBottom);
context.bezierCurveTo(segmentLeft, thisBottom, segmentRight, prevBottom, segmentRight, prevBottom);
/*
* ...define additional segments...
*/
// <dream> Ideally I would like to attach to events on each path:
context.setMouseover(function(){/*Show hover content*/});
// </dream>
context.closePath();
La liaison à un objet de ce type est presque triviale à mettre en œuvre dans Flash ou Silverlight, car si l'implémentation actuelle de Canvas a l'avantage d'utiliser directement notre API Javascript existante et de s'intégrer à d'autres éléments Ajax, nous espérons éviter de faire intervenir Flash.
Des idées ?