D3.js 仅水平拖动工作

D3.js 仅水平拖动工作,d3.js,drag,force-layout,D3.js,Drag,Force Layout,我有一个节点连接到大约5个其他节点,然后我可以在任何方向上拖动该节点,但是如果连接的节点数增加,比如说大约50,那么该节点的拖动只发生在水平方向上,而不能垂直拖动该节点。我使用强制布局 需要做什么。 提前谢谢 这是代码: scope.force.on("tick", function(e) { var ky = 1.2 * e.alpha; // scope.currentLinks are all link

我有一个节点连接到大约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 + ")";
                            });    
                    }  
                });

发生这种情况时,锁定
y
值。 可能在链接的
d.source.y
d.target.y
中。可能
y
15
小得多,因为
函数(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;
});

你需要发布一些代码或是一把小提琴,这不能用你提供的细节来回答。嗨,以利亚,我编辑了这篇文章来添加我所做的代码更改。嗨,Evgeniy,你所说的“锁定”y值是什么意思?我需要做的是什么呢?我的意思是
y
是固定值(可能接近~15)。请参阅
勾选()
函数。您可以使用条件
if(d3.event.type!=“drag”)
来禁用
y+e.alpha
的计算,并返回
d.(源|目标)。y
仅不带
+=“code>。。。。