如何防止在调用brush.move后触发d3刷子事件

时间:2017-07-11 13:07:38

标签: d3.js brush

我正在并排显示几个相同的图表(显示不同的数据集)。刷一张图表后,刷子应该复制到其他所有图表上。

目前,只要有人在图表上刷新,我就会在brush.move所有图表上调用selection,而不是当前刷过的图表。这发生在brush - 类型eventListener。

但是,此brush.move会触发附加到画笔的brush - 类型事件,从而导致错误(或者更常见的是无限循环)。

我该如何防止这种情况?

1 个答案:

答案 0 :(得分:4)

您可以使用d3.event对象来检查导致刷子更新的原因。来自brush events上的API文档:

  

刷子事件

     

调用brush event listener时,d3.event设置为当前画笔事件。事件对象公开了几个字段:

     
      
  • ...
  •   
  • sourceEvent - 基础输入事件,例如mousemove或touchmove。
  •   

如果您的画笔是以编程方式修改的,即通过调用brush.move()d3.event.sourceEvent属性将为null,因为没有输入事件导致此更新。在您的事件处理程序中,您可以检查此属性以跳过执行程序更改:

if (!d3.event.sourceEvent) return;

Mike Bostock在Brush Snapping Block中采用了相同的技巧。在处理实际的输入事件时,刷子会再次被修改为捕捉到最近的值,显然,这不应该触发事件处理程序的另一次运行。