Я создал механизм визуализации аналитических данных для Canvas, и мне было предложено добавить всплывающую подсказку в виде всплывающих над элементами данных для отображения подробных метрик для точки данных под курсором.
Для простых гистограмм и диаграмм Гаанта, древовидных диаграмм и карт узлов с простыми квадратными областями или конкретными точками интереса я смог реализовать это путем наложения абсолютно позиционированных DIV с атрибутами: hover, но есть и более сложные визуализации, такие как как круговые диаграммы и рендеринг транспортного потока, который имеет сотни отдельных областей, определенных кривыми Безье.
Можно ли каким-либо образом прикрепить оверлей или вызвать событие, когда пользователь наведется на определенный закрытый путь?
Каждая область, для которой необходимо указать наведение, определяется следующим образом:
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();
Привязка к объекту, подобному этому, почти тривиальна для реализации во Flash или Silverlight, поскольку текущая реализация Canvas имеет преимущество, заключающееся в непосредственном использовании нашего существующего API Javascript и интеграции с другими элементами Ajax, и мы надеемся не помещать Flash в смесь.
Есть идеи?