Come disabilitare lo zoom con doppio clic per d3.behavior.zoom?

Non voglio d3.behavior.zoom per aggiungere la possibilità di fare doppio clic su zoom sul mio grafico. Come posso disabilitare questo comportamento?

Ecco un JSFiddle con il comportamento indesiderato.

Ho provato il seguente senza fortuna.

d3.behavior.zoom.dblclick = function() {}; 

Puoi disabilitare il comportamento del doppio clic rimuovendo il listener di eventi di dblclick del comportamento dello zoom. Guardando il tuo codice, hai assegnato il comportamento dello zoom all’elemento SVG. Quindi potresti dire:

 d3.select("svg").on("dblclick.zoom", null); 

Oppure, insieme a dove registri il comportamento dello zoom:

 .call(d3.behavior.zoom().on("zoom", update)).on("dblclick.zoom", null) 

Potresti anche voler spostare il comportamento dello zoom su un elemento G piuttosto che metterlo sull’elemento radice SVG; Non sono sicuro che funzionerà correttamente su SVG radice, poiché l’elemento SVG non supporta l’ attributo transform .

È facile impostare una funzione proxy. Archivia l’evento predefinito (target), quindi registra un evento proxy. Il proxy abiliterà / disabiliterà l’evento di destinazione utilizzando qualsiasi logica sia necessaria:

 svg.call(zoom); var dblclickTarget = svg.on("dblclick.zoom"); var mouseScrollTarget = svg.on("mousewheel.zoom"); function eventProxy(fn){ return function(){ // Enable events if enableEvents=== true if(enableEvents){ fn.apply(this, arguments) } } }; svg.on("wheel.zoom", eventProxy(dblclickTarget)) .on("mousewheel.zoom", eventProxy(mouseScrollTarget));