我想在点击(或双击)d3-brush的选定区域时运行javascript函数。我也想明白为什么我的天真方法不起作用。
d3-brush创建了两个rects:一个是类选择,它是当前选择的画笔区域,另一个是类叠加,它覆盖了画笔的最大可能范围。
我能够检测到这两个对象上的mousedown
个事件,我只能检测到叠加层上的click
(或dblclick
个)事件,而我无法检测到{{} 1}}事件:
mouseup

var svg = d3.select("svg")
var g = svg.append("g")
var brush = d3.brush()
var brushGroup = g.append("g")
.call(brush)
brushGroup.selectAll(".overlay")
.on("mousedown", () => console.log('mousedown on overlay'))
.on("click", () => console.log('click on overlay'))
.on("mouseup", () => console.log('mouseup on overlay'))
brushGroup.selectAll(".selection")
.on("mousedown", () => console.log('mousedown on selection'))
.on("click", () => console.log('click on selection'))
.on("mouseup", () => console.log('mouseup on selection'))

我想了解这种不一致。我隐约知道这与d3-brush v4'消费'有关。或者'停止传播'在某些情况下的某些事件。但我找不到哪些文件和何时文件。
我意识到在d3消耗之前我需要在那里处理事件。但是我不知道该怎么做,而且我还没能找到一个例子。
我也找不到d3源的相关部分。我在d3-brush和d3-selection中对<svg width="300" height="200">
<rect width="100%" height="100%" fill="none" stroke="gray"></rect>
</svg>
<script src="https://d3js.org/d3.v4.min.js"></script>
和click
进行了grep&f,并且没有发现任何相关内容。所以即使被指出正确的代码也会有助于我的理解。