Javascript 为什么D3的笔刷开始事件会干扰以后的笔刷事件?

Javascript 为什么D3的笔刷开始事件会干扰以后的笔刷事件?,javascript,d3.js,Javascript,D3.js,在下面的最小示例中,画笔用于选择圆,将其指定为选定的类,然后在末尾清空。如果没有“开始”事件,选择将按预期随每个笔刷操作而增加。但是,除非按下ctrl键,否则会添加brushstart功能,以便在每次笔刷操作开始时清除。不知何故,它最终也会清除稍后在笔刷事件中发生的选择。您可以看到,在刷牙过程中,随着颜色的变化,圆圈被选中,但当松开鼠标时,它们都被取消选中 我怎样才能解决这个问题?真正让我困惑的是,brushstart如何取消brushmove所做的选择 “严格使用” var random=d

在下面的最小示例中,画笔用于选择圆,将其指定为选定的类,然后在末尾清空。如果没有“开始”事件,选择将按预期随每个笔刷操作而增加。但是,除非按下ctrl键,否则会添加brushstart功能,以便在每次笔刷操作开始时清除。不知何故,它最终也会清除稍后在笔刷事件中发生的选择。您可以看到,在刷牙过程中,随着颜色的变化,圆圈被选中,但当松开鼠标时,它们都被取消选中

我怎样才能解决这个问题?真正让我困惑的是,brushstart如何取消brushmove所做的选择

“严格使用” var random=d3.randomUniform0.1,0.9, 点=d3.range50.mapfunction{ 返回[随机,随机] }; var svg=d3.selectsvg, 宽度=+svg.attrwidth, 高度=+svg.attrheight; var x=d3.scaleLinear .domain[0,1] .范围[0,宽度], y=d3.刻度线 .domain[0,1] .范围[高度,0]; var brush=d3.brush .开始,开始 .在“刷子”上,刷子移动 .ONED,刷毛; var circles=svg.selectAllcircle .数据点 .enter.appendcircle .attrcx,已运行{ 返回xd[0]; } .消耗性,功能性{ 返回yd[1]; } .attrr,2.5 .attrfill,“钢蓝”; svg.appendg .画笔 .毛刷; 功能刷起动{ //在没有以下线路的情况下按预期工作 如果!d3.event.ctrlKey{ 圆圈。分类为“选定”,为false } } 功能刷移{ var s=d3.event.selection; 如果是{ var newlySelected=circles.filterFunction{
从brushend调用返回s[0][0]brushstart:

if (s) {
    svg.select(".brush").call(brush.move, null);
  }
也许您可以在brushstart中检查选择:

function brushstart() {
  // works as expected w/o the following line
  if (!d3.event.ctrlKey && d3.event.selection) {
    circles.classed('selected', false)
  }
}

非常感谢。您的建议解决了上述问题,但密钥检查也需要更改为!d3.event.sourceEvent.ctrlKey才能按预期工作。后者是我的错误。