[英]D3.js Dynamic connector between objects
我對JS和D3都很陌生,我用谷歌搜索了這一噸,但只發現了一些有點過於先進的例子。
我正在做一個簡單的決策圖實現,而我卻試圖用線/路徑連接2個節點。 可以使用鼠標移動對象,並且路徑應始終更新以反映對象的位置。
這是我的基礎知識來源: 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);
}
在這里完成示例。 還有其他更優雅的方法來實現這一目標。 在實際應用程序中,您將擁有綁定到元素的數據,並可以使用它來區分不同的圓圈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.