0

我之前遇到过这个问题,这是由于我的 d3.select 与我的 attr 不匹配。但是,我没有从当前的错误中收到任何错误,就我做错的事情而言,我有些迷失:

 var drag = d3.behavior.drag()
   .origin(Object)
   .on("drag", function(d, i) {
    d.x = d3.event.x;
    d.y = d3.event.y;
  d3.select(this).attr("transform", "translate("+nodes[i].locations[0].x+","+nodes[i].locations[0].y+")");

});

如您所见,我正在通过索引查找所有位置。会不会影响拖拽功能?

   var node = svg.selectAll("g.node")
             .data(nodes)

   node.enter().append("g")
        .call(drag)
       .attr('class', 'node');

 node.attr("transform", function(d,i) { return"translate("+nodes[i].locations[0].x+","+nodes[i].locations[0].y+")"; })

我很困惑为什么这不起作用

我也尝试更改我的 ondrag 功能,但是当我尝试拖动节点时,它只会移动到中心

 .on("drag", function(d, i) {
      nodes[i].locations[0].x = d3.event.x;
      nodes[i].locations[0].y = d3.event.y;
      d3.select(this).attr("transform", "translate ("translate("+nodes[i].locations[0].x+","+nodes[i].locations[0].y+")");
   //    draw();
   });

谢谢。

4

1 回答 1

0

我相信我已经找到了解决问题的方法:

.on("drag", function(d, i) {
      nodes[i].locations[0].x += d3.event.dx;
      nodes[i].locations[0].y += d3.event.dy;
于 2013-04-29T16:30:36.357 回答