d3.js Zoom-Beispiel in Version 4 umschreiben

eispiel für Drag & Dr

Ich versuche, einen Teil dieses obigen Beispiels neu zu schreiben, um ihn in meinem Code zu verwenden, insbesondere dieses Stück:

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]);
    }

Aber ich stecke fest, da sich das v4-Paket ziemlich verändert hat. Ich habe meine zoomListener-Funktion geschrieben, um @ zu se

    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

}

und ich weiß, dass sich laut doc die sachen geändert haben und info nicht mehr gespeichert werden auf was wäre mein zoomListener D3 V4 Release Note zum Zoom Ich schätze, ich bin nur verwirrt darüber, wie ich es mit der neuen Version machen soll. Die letzten Zeilen meiner centerNode-Funktion funktionieren nicht, was zur Folge hat, dass beim Zentrieren des Knotens das Zoomen und Schwenken zurückgesetzt wird ...

Irgendein Vorschlag

Antworten auf die Frage(4)

Ihre Antwort auf die Frage