Как отключить двойное масштабирование для d3.behavior.zoom?
Я не хочу d3.behavior.zoom, чтобы добавить возможность двойного щелчка мыши по моему графику. Как я могу отключить это поведение?
Вот JSFiddle с нежелательным поведением.
Я пробовал следующее без везения.
d3.behavior.zoom.dblclick = function() {};
Ответы
Ответ 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));