Подтвердить что ты не робот

Как отключить двойное масштабирование для d3.behavior.zoom?

Я не хочу d3.behavior.zoom, чтобы добавить возможность двойного щелчка мыши по моему графику. Как я могу отключить это поведение?

Вот JSFiddle с нежелательным поведением.

Я пробовал следующее без везения.

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

Ответ 1

Вы можете отключить поведение двойного щелчка, удалив прослушиватель событий dblclick. Посмотрев на свой код, вы назначили поведение масштабирования элементу SVG. Поэтому вы можете сказать:

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

Или вместе с тем, где вы регистрируете поведение масштабирования:

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

Вам также может потребоваться изменить поведение масштабирования до элемента G, а не помещать его в корневой элемент SVG; Я не уверен, что он будет корректно работать с корневым SVG, поскольку элемент SVG не поддерживает атрибут .

Ответ 2

Легко настроить прокси-функцию. Сохраните событие по умолчанию (цель), а затем зарегистрируйте прокси-событие. Прокси затем включит/отключит целевое событие, используя любую логику, которая вам нужна:

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