Пример масштабирования d3.js в версии 4
Я пытаюсь переписать часть этого примера выше для использования в моем коде, в частности, этот кусок:
function centerNode(source) {
scale = zoomListener.scale();
x = -source.y0;
y = -source.x0;
x = x * scale + viewerWidth / 2;
y = y * scale + viewerHeight / 2;
d3.select('g').transition()
.duration(duration)
.attr("transform", "translate(" + x + "," + y + ")scale(" + scale + ")");
zoomListener.scale(scale);
zoomListener.translate([x, y]);
}
Однако я застреваю, так как пакет v4 изменился совсем немного. Я написал свою функцию zoomListener, чтобы быть
var zoomListener = d3.zoom()
.scaleExtent([0.3,2])
.on("zoom", zoomed);
function zoomed() {
transform = d3.event.transform;
console.log(d3.event);
svg.attr("transform", transform);
}
function centerNode(source){
t = transform;
console.log(t);
x = t.x*t.k; //I only want things to be centered vertically
y = (t.y + -source.x0)*t.k + (viewerHeight)/2 ;
svg.transition()
.duration(duration)
.attr("transform","translate(" + x + "," + y +")scale(" + t.k + ")");
transform.scale(t.k); //DOES NOT WORK
transform.translate([x, y]); //DOES NOT WORK
}
и я знаю, что в соответствии с документом все изменилось, и информация больше не хранится на том, что будет мой zoomListenerПримечание к выпуску D3 V4 при увеличении Я думаю, я просто запутался в том, как мне поступить с новой версией. Последние несколько строк моей функции centerNode не работают, что приводит к тому, что когда я центрирую узел, масштабирование и панорамирование сбрасываются ...
Любое предложение?