我有一个图表,我随着时间的推移动态创建节点。 经过一段时间后,我淡出节点并将其删除。
我有两个变量:
data_nodes ,其中包含将节点绑定到
节点,这是d3.selectAll的结果
我已尝试过以下
node = svg.selectAll(".nodes")
.data(data_nodes, function(d){return d.id;});
node.exit.remove();
这很好用。当我检查SVG时,节点被正确删除
但是当我做的时候
node = svg.selectAll(".nodes")
.data(data_nodes, function(d){return d.id;});
node.exit().transition()
.duration(duration+100)
.style("opacity", 1e-6)
.remove();
节点按预期淡出,但它们不会从SVG元素中删除。 DOM中的圆圈元素数量不断增加。
当我在控制台中检查 data_nodes 和节点的大小时,它们是我期望的那样,但是如果我这样做的话
d3.selectAll(" .nodes")在控制台中我可以看到数字错误。
感谢您的帮助。
解:
看来我在exit()上的转换太长而且有些节点重新进入,因此在enter()上分配了一个转换。
答案 0 :(得分:3)
将评论转化为答案,因为这是问题所在:
您在第一次转换期间安排了另一次转换,取消了remove
。
来自the docs:
如果在任何所选元素上安排了较新的转换, 这些元素不会被删除;然而,“结束”事件将会 仍然被派遣。