3

我想知道如何更好地控制我的 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() 返回的代码:

function brushed() {
    if(rightClick()){
        console.log("Right click : " + rightClick());
    }
    else {
        console.log("Right click <false> : " + rightClick())

                x.domain(brush.empty() ? x.domain() : brush.extent());
                if(!brush.empty()){
                  //do something and redraw it
                }
                else{ //correctiong when brush.empty() restables x.domain to general value
                  resetView();
               }
         }//end-of first else
}

但是每次 rightClick() 为真时,我的画笔仍然“作为常规”左键单击。

任何帮助/见解表示赞赏。

感谢您的时间。

4

1 回答 1

1
  1. 上下文菜单

    我正在使用这个d3-context-menu在 svg 元素上显示上下文菜单。

    但是该插件不能直接在 d3.brush rects 上使用。右键 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));
    
  2. 禁用调整大小

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

    // after call brush
    brushG.selectAll(“.resize”).remove();
    
于 2015-06-15T12:29:56.673 回答