Вы можете отключить поведение двойного щелчка, удалив прослушиватель событий dblclick. Посмотрев на свой код, вы назначили поведение масштабирования элементу SVG. Поэтому вы можете сказать:
d3.select("svg").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));