我的目标是构建一个使用两个d3-zoom和d3-brush在一起的D3(V4)图表,如下所示:D3 V4刷和缩放同一元件上(无鼠标事件冲突的)
- 当鼠标(用鼠标滚轮)或平移(通过左右拖动)
- 当鼠标位于y轴上时,用户可以放大(用鼠标滚轮)或平移(通过向上和向下拖动)
- 当鼠标位于统计图主体上方时,用户可以放大(用鼠标滚轮)或画笔来设置x域在特定范围
我已成功地同时实现变焦和相应的轴线平移(根据要求1 & 2),但我有组合两个在一起,以实现要求3
问题我已经做了以下的基础上,文档/例子:
进行涂刷,追加
g
SVG元素和调用元素的brush
。该库创建一个rect
与overlay
里面,并附加适当的鼠标事件,让我画这个空间内的画笔区域。对于缩放,请附加一个
rect
SVG元素并在该元素上调用zoom
。图书馆连接适当的鼠标事件,让我用鼠标滚轮在该空间内上下滚动。
我遇到的问题是这两种方法的结合。因为zoom
和brush
都创建了rect
并处理鼠标事件,所以一次只能使用一个。最后创建的SVG元素“窃取”鼠标输入并不会将其传播到另一个。我怎样才能让这两人在主图表区域一起很好地玩耍?
我有一个示例项目,显示问题。它是基于角&打字稿,但可以运行如下:
- 结帐我的例子在https://github.com/mattwilson1024/d3-zoom-and-brush
- 运行应用程序运行
npm install
或yarn install
,然后npm start
或yarn start
- 打开
http://localhost:4200
- 你可以放大&在两个轴上平移,或刷出主图表区域。可缩放区域为绿色和红色,以帮助调试
- 打开/src/app/char/chart.component.ts并取消注释行196.这将移动x轴“缩放区域”(rect)以覆盖整个身体的图表。这意味着您可以使用滚轮在图表上的任意位置使用鼠标进行缩放。
- 问题是,现在缩放区域从画笔“窃取”鼠标事件,因此刷牙不再可能,而是平移。我希望能够通过拖动鼠标进行刷动,但仍然可以使用滚轮进行缩放,而不是使用
d3-zoom
设置的平移行为。
感谢您的答复。将缩放行为附加到SVG矩形允许滚动在图表主体上工作,但它也具有“窃取”画笔输入的效果。我后是鼠标滚轮来放大,但要能拖动刷子以及(而不是默认的平移行为变焦插件添加)。换句话说,我只希望缩放插件添加缩放而不是平移。 –
唉唉。好的。所以,缩放和平移应该一起工作,但我还没有找到任何其他方式来缩放,平移和矩形选择刷子一起工作。我们在项目中所做的事实上是有一个缩放模式切换。默认是平移和滚动缩放,但您可以切换到矩形选择模式。如果你走这条路线,你可以做一些简单的事情,比如引入一个CSS类,代表切换,这将禁用其中一种模式的指针事件。 – Gopherkhan