我有一个连接到大约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 + ")";
});
}
});
答案 0 :(得分:0)
在哪里发生锁定y
值。
可能在d.source.y
或d.target.y
中有链接。可能y
与15
相比显着较小,因为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;
});