D3.js 仅水平拖动工作
我有一个节点连接到大约5个其他节点,然后我可以在任何方向上拖动该节点,但是如果连接的节点数增加,比如说大约50,那么该节点的拖动只发生在水平方向上,而不能垂直拖动该节点。我使用强制布局 需要做什么。 提前谢谢 这是代码: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
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>。。。。