Пример масштабирования 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 не работают, что приводит к тому, что когда я центрирую узел, масштабирование и панорамирование сбрасываются ...

Любое предложение?

Ответы на вопрос(2)

Ваш ответ на вопрос