Я строю линейный график с D3.js. Когда Мышки пользователя над графиком, я хотел бы нарисовать вертикальную линию на графике, выделите ее пересечение с графиком линиями, и показать всплывающую подсказку, как этот скриншот:рисование линии на линии графа на мыши?
Я получил часть пути вниз по этой дороге. Вот мой код на JSFiddle: http://jsfiddle.net/BvuBV/1/
Как вы можете видеть, я слушаю события мыши на svg
элемент, и линия (вроде) будут правильно отображаться:
// Add mouseover events.
svg.on("mouseover", function() {
console.log('mouseover')
}).on("mousemove", function() {
console.log('mousemove', d3.mouse(this));
var x = d3.mouse(this)[0];
hoverLine.attr("x1", x).attr("x2", x).style("opacity", 1);
}).on("mouseout", function() {
console.log('mouseout');
hoverLine.style("opacity", 1e-6);
});
Однако есть несколько проблем:
- в
mouseover
иmousemove
события, кажется, не стрелять последовательно, когда мышь над элементом SVG, только иногда - я делаю что-то не так? - Я не знаю, как перевести
x
иy
значения, предоставленныеd3.mouse(this)
обратно в дату иinlet
значений, так что я могу сделать нужные круги на графике, и показать нужный всплывающее окно.
Любая помощь очень ценится.
UPDATE: Благодаря помощи @Aegis я решил 1 и часть 2: http://jsfiddle.net/BvuBV/4/
Но я до сих пор не знаю, как подчеркнуть пересечение парения линии с двумя линиями диаграммы, и как для получения значений линий диаграммы в этой точке.
Я исследовал то же самое, и я думаю, что я о том, где вы с этой проблемой. Тем не менее, я замечаю одну вещь, которая может помочь вашей диаграмме. Не утруждайте себя бесполезностью через JS. Просто сделайте это в CSS: .hover-line {opacity: 0; } .air-quality: hover .hover-line {opacity: 1; } –