我使用此代码查看每个点的 X 和 Y 值,并在鼠标事件上在我的曲线上画一个圆圈:这里的 jsFiddle 示例
Y_value 是一个全局的!
var Y_value;
我定义了我的轴怒
x = d3.time.scale().range([0, w]);
y = d3.scale.linear().range([h, 0]);
我定义了圆形光标
var circle = svg.append("circle")
.attr("r", 8)
.attr("cx", 0)
.attr("cy", 0)
.style({fill: '#fff', 'fill-opacity': .2, stroke: '#000', "stroke-width": '1px'})
.attr("opacity", 0);
我在我的圈子上添加了一个工具提示
var tooltip = circle.append("svg:title");
我有我的事件代码
mySensitiveArea.on("mousemove", function() {
var X_pixel = d3.mouse(this)[0],
X_date = x.invert(X_pixel);
var Y_pixel = y(Y_value);
var pathData = curve1.data()[0]; // recupere donnée de la courbe
pathData.forEach(function(element, index, array) {
if ((index+1 < array.length) && (array[index].date <= X_date) && (array[index+1].date >= X_date)) {
if (X_date-array[index].date < array[index+1].date-X_date) Y_value = array[index].val;
else Y_value = array[index+1].val;
}
});
circle.attr("opacity", 1)
.attr("cx", X_px)
.attr("cy", Math.round(y(Y_value)));
tooltip.text("X = " + (X_date) + "\nY = " + (Y_value));
});