gpt4 book ai didi

javascript - D3.js 对象之间的动态连接器

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:49 25 4
gpt4 key购买 nike

我对 JS 和 D3 都很陌生,我用谷歌搜索了很多,但只找到了有点太高级的例子。

我正在做一个简单的决策图实现,但我一直在尝试用一条线/路径连接 2 个节点。对象可以用鼠标四处移动,路径应始终更新以反射(reflect)对象的位置。

这是我的基本知识来源:https://github.com/mbostock/d3/wiki/SVG-Shapes ,但我不太明白如何用它做一些聪明的事情。

这是我目前拥有的:http://jsbin.com/AXEFERo/5/edit

不需要花哨的东西,只需要了解如何创建连接器并在拖动对象时让它们动态更新。非常感谢!

最佳答案

要在圆圈之间画一条线,您不需要任何特殊的东西——只需要 line 元素。

var line = svg.append("line")
.style("stroke", "black")
.attr("x1", 150)
.attr("y1", 100)
.attr("x2", 250)
.attr("y2", 300);

动态更新位置有点困难。目前,您无法区分拖动的是哪个圆圈。一种方法是向 g 元素添加一个可区分的类。

var g1 = svg.append("g")
.attr("transform", "translate(" + 150 + "," + 100 + ")")
.attr("class", "first")
...

另一个也是如此。现在,您可以在 dragmove 函数中打开该类,并更新直线的起点或终点坐标。

if(d3.select(this).attr("class") == "first") {
line.attr("x1", x);
line.attr("y1", y);
} else {
line.attr("x2", x);
line.attr("y2", y);
}

完整示例 here .还有其他更优雅的方法可以实现这一点。在实际应用程序中,您会将数据绑定(bind)到元素,并可以使用它来区分不同的圆圈。

关于javascript - D3.js 对象之间的动态连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18672761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com