我有两个g
元素,每个元素都包含圆圈。使用force.layout
组织圈子。 g
元素正在转换。
您可以在此处看到:demo。减少代码:
var dots = svg.selectAll(".dots")
.data(data_groups)
.enter().append("g")
.attr("class", "dots")
.attr("id", function (d) {
return d.name;
})
...
.each(addCircles);
dots.transition()
.duration(30000)
.ease("linear")
.attr("transform", function (d, i) {
return "translate(" + (150 + i * 100) + ", " + 450 + ")";
});
function addCircles(d) {
d3.select(this).selectAll('circle')
.data(data_circles.filter(function (D) {
return D.name == d.name
}))
.enter()
.append('circle')
.attr("class", "dot")
.attr("id", function (d) {
return d.id;
})
...
.call(forcing);
}
function forcing(E) {
function move_towards(alpha) {
...
}
var force = d3.layout.force()
.nodes(E.data())
.gravity(-0.01)
.charge(-1.9)
.friction(0.9)
.on("tick", function (e) {
...
});
force.start();
}
我需要使用转换将圆圈(例如id = 1)从第一个g
元素移动到第二个元素。
任何建议都表示赞赏。
答案 0 :(得分:2)
可以做到。
我做的是:
1)使用jquery将点附加到目标组 2)使用转换(无转换)将点移回其原始位置 3)将点转换到新位置
jQuery用于appendTo
方法。它可以删除并替换为一些纯粹的Javascript东西,但它非常方便。
我有一个部分工作的小提琴here.绿点适当,但蓝色的东西出了问题。不知道为什么。
答案 1 :(得分:0)
在我看来,转换适用于单个元素。如果一个元素改变了它在DOM树中的位置,从一个g
下面改变到另一个,我想不出一种方法可以将它作为一个平滑过渡,因为它基本上是一个二进制分割:现在有一个元素在一个g
,现在它已经消失,但在其他地方还有另一个。
我要做的是为了实现我想要做的事情:将所有内容分组在同一个'g'下,分别指定颜色和翻译,然后更改要更改的单个元素的颜色和翻译。
但是,不要把它当作一个可靠的陈述,说明你不能按照原来想要的方式去做。