d3js - 退出后退出节点()

时间:2014-08-11 23:44:57

标签: javascript svg d3.js

我有一个图表,我随着时间的推移动态创建节点。 经过一段时间后,我淡出节点并将其删除。

我有两个变量:

  • 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()上分配了一个转换。

1 个答案:

答案 0 :(得分:3)

将评论转化为答案,因为这是问题所在:

您在第一次转换期间安排了另一次转换,取消了remove

来自the docs

  

如果在任何所选元素上安排了较新的转换,   这些元素不会被删除;然而,“结束”事件将会   仍然被派遣。