仅水平拖动工作

时间:2014-12-26 06:58:23

标签: d3.js drag force-layout

我有一个连接到大约5个其他节点的节点然后我能够在任何方向上拖动该节点,但是如果连接的节点数增加大约50,那么该节点的拖动仅在水平方向上发生,而不是能够垂直拖动该节点。我使用强制布局。

需要做什么。 提前致谢

这是代码:

 scope.force.on("tick", function(e) {        
                        var ky = 1.2 * e.alpha; 
          // scope.currentLinks are all links in graph 
                        scope.currentLinks.forEach(function(d, i) { 
// d.source.properties.UI_HIERARCHY or d.target.properties.UI_HIERARCHY value ranges from 0 to 4
                     d.source.y += ((4 -(d.source.properties.UI_HIERARCHY)) * 80 - d.source.y) * ky;
                     d.target.y += ((4 -(d.target.properties.UI_HIERARCHY)) * 80 - d.target.y) * ky;
                        });
                        scope.link.attr("x1", function (d) {
                                return d.source.x+15;
                            })
                            .attr("y1", function (d) {
                                return d.source.y+15;
                            })
                            .attr("x2", function (d) {
                                return d.target.x+15;
                            })
                            .attr("y2", function (d) {
                                return d.target.y+15;
                            });

                            scope.node.attr("transform", function (d) {
                                return "translate(" + d.x + "," + d.y + ")";
                            });    
                    }  
                });

1 个答案:

答案 0 :(得分:0)

在哪里发生锁定y值。 可能在d.source.yd.target.y中有链接。可能y15相比显着较小,因为function (d) {return d.target.y+15;}始终返回~15

这可能发生在不同的地方,而不仅仅是tick()

通过拖动查看console.log()

    .attr("y1", function (d) {
      console.log("y1 " + d.source.y+15);        
      return d.source.y+15;
    })                              
    .attr("y2", function (d) {
       console.log("y2 " +d.target.y+15);        
       return d.target.y+15;
   });

<强> UPD:

if (e.type !== "drag") {

    var ky = 1.2 * e.alpha; 
    scope.currentLinks.forEach(function(d, i) { 
        d.source.y += ((4 -(d.source.properties.UI_HIERARCHY)) * 80 - d.source.y) * ky;
        d.target.y += ((4 -(d.target.properties.UI_HIERARCHY)) * 80 - d.target.y) * ky;
    });                        

}

scope.node.attr("transform", function (d) {
    return "translate(" + d.x + "," + d.y + ")";
});  

scope.link.attr("x1", function (d) {
    return d.source.x+15;
})
.attr("y1", function (d) {
    return d.source.y+15;
})
.attr("x2", function (d) {
    return d.target.x+15;
})
.attr("y2", function (d) {
   return d.target.y+15;
});