D3.js 如何控制d3.brush(右键单击)

D3.js 如何控制d3.brush(右键单击),d3.js,brush,D3.js,Brush,我想知道如何更好地控制我的d3.brush组件。 我想对其进行一些额外的控制,例如: 右键单击(打开一个特殊的菜单,而不是常规的浏览器菜单,也不是奇怪的笔刷行为) 能够禁用可调整大小(即允许用户仅移动画笔而不调整大小)画笔功能(无论何时我想要控制它) 我已经在这里读过一些类似的老问题,但到目前为止运气不好 当我的画笔区域出现右键单击时,我已经可以阅读: //code from an older post function rightClick() { if (d3.ev

我想知道如何更好地控制我的d3.brush组件。 我想对其进行一些额外的控制,例如:

  • 右键单击(打开一个特殊的菜单,而不是常规的浏览器菜单,也不是奇怪的笔刷行为)
  • 能够禁用可调整大小(即允许用户仅移动画笔而不调整大小)画笔功能(无论何时我想要控制它)
我已经在这里读过一些类似的老问题,但到目前为止运气不好

当我的画笔区域出现右键单击时,我已经可以阅读:

//code from an older post 
function rightClick() { 
         if (d3.event.sourceEvent.which == 3 || d3.event.sourceEvent.button 
== 2) { //3==firefox, 2==ie 
                 return true; 
         } else { 
                 return false; 
         } 
 }
下面是我使用rightClicl()返回的代码:

函数刷过(){
如果(右键单击()){
log(“右键单击:+rightClick());
}
否则{
log(“右键单击:”+rightClick())
x、 域(brush.empty()?x.domain():brush.extent());
如果(!brush.empty()){
//做点什么,重新画出来
}
else{//correctiong when brush.empty()将x.domain重新启动为常规值
重置视图();
}
}//第一个结束
}
但每次rightClick()为真时,我的画笔仍“作为常规”左键单击

感谢您的帮助/见解

谢谢你抽出时间

  • 上下文菜单

    我用它来显示svg元素的上下文菜单

    但是,该插件不能直接用于d3.brush矩形。右mousedown事件也将触发笔刷事件。我尝试了
    event.stopImmediatePropagation()
    ,成功了

    g.selectAll(".extent")
     .on("mousedown", function() {
         if (d3.event.button === 2) { // only enable for right click
               d3.event.stopImmediatePropagation();
         }
     })
     .on("contextmenu", d3.contextMenu(menu));
    
  • 禁用调整大小

    d3似乎没有针对该特性的明确选项。 但您可以删除笔刷组中的调整大小矩形

    // after call brush
    brushG.selectAll(“.resize”).remove();
    
  • // after call brush
    brushG.selectAll(“.resize”).remove();