繁体   English   中英

鼠标事件并在D3中刷

[英]Mouse events and brush in D3

我目前正在尝试自定义http://nvd3.com/ghpages/lineWithFocus.html上的时间系列图表示例。 这是使用nvd3实现的,这是一个位于d3之上的库。 我想在顶部图形中提供数据点的工具提示,但也希望能够在同一图形中选择一个范围,如示例中的底部“查找查找器”图形。

为此,我在基本折线图的示例中添加了“画笔”(请参阅http://nvd3.com/ghpages/line.html )。 范围选择就像一个魅力,然而,数据点的工具提示不再起作用,除了刚好在轴范围之外的点。 看起来,位于画笔区域中的数据点不再获得鼠标事件,并且画笔吸收它们全部。

线路的数据点接收鼠标事件需要改变什么(特别是鼠标悬停,我不关心点击)?

尝试捕获所有事件

d3.select(window).on("...", function) 

然后在数据点上触发一些“鼠标悬停”事件(如果适用)。 怎么可能实现这一点(我不会通过所有数据点,然后检查哪一个最接近鼠标事件...)? 有更简单的方法吗?

如果你将在'brush'上的任何地方检查元素 (Chorme),你会注意到你试图捕获事件的其他图形元素之后构建的元素。

d3.brush函数创建一个隐藏的背景来捕获鼠标事件。

// An invisible, mouseable area for starting a new brush.
      bg.enter().append("rect")
          .attr("class", "background")
          .style("visibility", "hidden")
          .style("cursor", "crosshair");

所以解决方案是绘制数据之前调用画笔(线条,路径,散点图等)。

由于画笔覆盖会抓住你的鼠标事件 - 你需要它 - 我不确定你能解决这个问题。 最终事件冒泡只适用于DOM树,这些元素最多只是兄弟姐妹。

可能不是迭代所有数据点,而是只迭代刷子选择的那些数据点。 看看d3.touches(容器)

我有同样的问题。 我意识到画笔覆盖了其他物体(在我的例子中是圆圈)。 所以,首先我创建了画笔rect,然后我创建了其他对象。 这样我也可以访问其他对象的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM