D3.Drag使用嵌套数据的行为

时间:2013-04-29 05:44:07

标签: javascript d3.js

我之前遇到过这个问题&这是因为我的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();
   });

感谢。

1 个答案:

答案 0 :(得分:0)

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

.on("drag", function(d, i) {
      nodes[i].locations[0].x += d3.event.dx;
      nodes[i].locations[0].y += d3.event.dy;