1

私はsvg要素を持っています; ノード、リンク、ラベルなどがそれに追加されます。名前による特定ノードへのズーム機能を実行しましたが、問題は、それぞれのノードに自動的にズームした後、svg を (クリックしてドラッグして) パンしようとするたびに、ズームと座標がリセットされます。特定のノードにズームする前の様子です。d3.event.transform の動作に関係していると思いますが、修正できません。値をリセットせずに、ズームしたノードからパンとズームを続行できるようにしたいと考えています。

(また、少しのデバッグから、ノードの cx 座標と cy 座標がコードからのズームとパンによって変更されないことを確認しましたが、ノードを手動でズームおよびパンすると、変更されると思います。それが問題だ)

  var svg1 = d3.select("svg");
  var width = +screen.width;
  var height = +screen.height - 500;

  svg1.attr("width", width).attr("height", height);

  var zoom = d3.zoom();
  var svg = svg1
    .call(
      zoom.on("zoom", function() {
        svg.attr("transform", d3.event.transform);
      })
    )
    .on("dblclick.zoom", null)
    .append("g");


function highlightNode() {
    var userInput = document.getElementById("targetNode");
    theNode = d3.select("#" + userInput.value);
    const isEmpty = theNode.empty();
    if (isEmpty) {
      document.getElementById("output").innerHTML = "Given node doesn't exist";
    } else {
      document.getElementById("output").innerHTML = "";
    }
    svg
      .transition()
      .duration(750)
      .attr(
        "transform",
        "translate(" +
          -(theNode.attr("cx") - screen.width / 2) +
          "," +
          -(theNode.attr("cy") - screen.height / 4) +
          ")"
        // This works correctly
      );


  }
4

0 に答える 0