Я огляделся и не нашел надежного решения для настройки масштаба масштабирования, когда пользователь дважды щелкает экран.
Самое большее, что я получил, это установить scaleVal, как показано в функции dblclicked(), показанной здесь в скрипке.
https://jsfiddle.net/helloGoodDay/62vq9h8p/3/
function dblclicked()
{
var translate = zoom.translate(),
mouse = d3.mouse(this),
scaleOld = zoom.scale(),
zoomOld = Math.log(scaleOld) / Math.LN2,
zoomNew = d3.event.shiftKey ? Math.max(minScale + 8, Math.ceil(zoomOld) - 1) : Math.min(maxScale + 8, Math.floor(zoomOld) + 1),
scaleNew = Math.pow(scaleVal, zoomNew),
zoomDelta = scaleNew / scaleOld;
svg.transition()
.duration(350)
.call(zoom
.scale(scaleNew)
.translate([(translate[0] - mouse[0]) * zoomDelta + mouse[0], (translate[0] - mouse[0]) * zoomDelta + mouse[0]])
.event);
d3.event.stopImmediatePropagation();
}
Однако, если вы дважды щелкните еще немного, узлы исчезнут, и мне также не нравится анимация.
Есть ли способ установить значение масштаба таким образом, чтобы узлы не исчезали и чтобы анимация не была такой суетливой?
Изменить: функция взята из https://github.com/d3/d3/issues/1985 а>