2014-05-22 2 views
5

È possibile avere un pennello di larghezza statica, ovvero un pennello non ridimensionabile? Dovrebbe ancora essere trascinabile. Non sembra esserci nulla che indichi se è possibile nella documentazione.Disabilita ridimensionamento pennello d3

risposta

5

Non c'è alcuna opzione esplicita per questo, ma tutto quello che dovete fare è ripristinare il dominio nel gestore di eventi pennello, per esempio

var brush = d3.svg.brush().on("brush", brushed); 

function brushed() { 
    brush.extent(desiredDomain); 
} 
3

Resize può essere prevenuta nascondendo i pallini di ridimensionamento tramite CSS

g.brush>.resize { 
    display: none; 
} 
1

In realtà, il ripristino manuale dell'estensione non sembra funzionare correttamente.

La soluzione che ho trovato, che è nascosto nell'esempio di scorrimento, è quello di rimuovere l'elemento di ridimensionamento del tutto:

// Create the brush normally. 
var brush = d3.svg.brush() 
    .x(xScale) 
    .on("brush", brushed); 

// Add it to a SVG group 
var slider = context.append("g") 
    .attr("class", "x brush") 
    .call(brush); 

// Remove the resize control 
slider.selectAll(".resize").remove(); 
1

ho incontrato esattamente lo stesso problema. Stavo usando D3 4.0 e ho bisogno di implementare un pennello di dimensioni fisse lungo l'asse x. Ho usato drag.filter() funzione ed elementi modificati all'interno .brush per ottenere questo:

var brush = d3.brushX() 
      .filter(function() {return d3.mouse(this)[0] > brushStart && d3.mouse(this)[0] < brushStart + brushWidth}) 
      .extent([[0, 0], [width, height]]) 
      .on("end", brushended) 
      .on('brush', beingBrushed); 
svg.append('g') 
    .attr('class', 'brush') 
    .call(brush) 
    .call(brush.move, [0, brushWidth]); //initial position 
d3.selectAll('.brush>.handle').remove(); 

function brushended() { 
    var s = d3.event.selection; 
    if (s!== null) { 
     brushStart = s[0]; 
    } 
} 

questo modo il pennello permette trascinamento ma non ridimensionamento.

2

In D3.js v4.0 è possibile disabilitare gli eventi puntatore in CSS per gli elementi SVG (maniglia rettangolo).

.handle { 
 
    pointer-events: none; 
 
}