【问题标题】:d3js move a node without draggingd3js 移动节点而不拖动
【发布时间】:2012-08-07 00:38:57
【问题描述】:

我正在使用以下代码在我的 d3.js 图中移动一个节点:

d3.select("#"+ nodeid).attr("x",x);
d3.select("#"+ nodeid).attr("y",y);

这很好用,但是当我再次开始拖动节点时,它会“跳”回原来的位置并从那里开始移动。

有什么想法我在这里做错了吗?

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    我最终也将其添加到代码中

    d3.select("#"+ nodeid).data([{x: x, y: y}]);
    

    【讨论】:

      【解决方案2】:

      您正在更新 DOM 元素(图形),而不是基础数据,并且 dragstart 事件正在使用仍存储在数据中的原始位置。

      试试这样的:

      force.setNodeCoords = function (id, x, y) {
          var fnodes = force.nodes();
          fnodes[id].x = x;
          fnodes[id].y = y;
          force.nodes(fnodes);
          svg.selectAll("circle.node")
              .attr("cx", function(d) { return d.x; })
              .attr("cy", function(d) { return d.y; });
      };
      

      (其中svg 是您的 SVG 或其他父 div,node 是您的节点的类)

      您可能还想更新线路/链接!

      【讨论】:

      • 非常感谢您。我确定它有效,但我找到了一个简单的解决方法。
      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多