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

时间:2012-08-02 21:25:03

标签: javascript d3.js

我不希望d3.behavior.zoom添加在我的图表上双击缩放的功能。如何禁用此行为?

以下是JSFiddle,其中包含不受欢迎的行为。

我没有运气就试过以下内容。

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

2 个答案:

答案 0 :(得分:93)

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

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

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

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

您可能还希望将缩放行为向下移动到G element,而不是将其放在根SVG元素上;我不确定它在根SVG上是否能正常工作,因为SVG元素不支持transform attribute

答案 1 :(得分:3)

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



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




通过这种方式应用代理模式,您只需更改" enableEvents"变量以启用或禁用事件。

相关问题