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