如何禁用d3.behavior.zoom双击缩放?

我不希望d3.behavior.zoom添加在graphics上双击缩放的function。 我怎样才能禁用这种行为?

这是一个JSFiddle与不需要的行为。

我已经尝试了以下没有任何运气。

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

您可以通过删除缩放行为的dblclick事件侦听器来禁用双击行为。 查看你的代码,你已经将缩放行为分配给了SVG元素。 所以你可以说:

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

或者,与您注册缩放行为的位置一起:

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

您可能还想将缩放行为向下移动到G元素,而不是将其放在根SVG元素上; 我不确定它会在根SVG上正常工作,因为SVG元素不支持transform属性 。

设置代理function很简单。 存储默认(目标)事件,然后注册代理事件。 然后,代理将使用您需要的任何逻辑来启用/禁用目标事件:

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