2013-05-29 85 views
3

我想知道如何更好地控制我的d3.brush組件。 我想有它的一些額外的控制,如:如何控制d3.brush(右鍵單擊)

  • 右鍵(打開一個特殊的菜單,而不是常規的瀏覽器之一 - 而不是刷怪的行爲)
  • 能夠禁用可調整大小(即允許用戶只移動畫筆,而不是調整它的大小)畫筆功能(只要我想控制它)

我已經閱讀了一些老的類似的問題,但沒有運氣到目前爲止。

我已經可以讀時,右鍵點擊我的畫筆區域happend有:

//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 
} 

但每次右擊時間()是真的,我仍然有我的筆刷「作爲一個常規」左鍵單擊。

任何幫助/見解是讚賞。

謝謝你的時間。

回答

0
  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();