1

我有一个基于d3.layout.pack 图示例的可重用模块

我在节点元素上添加了退出时的转换,但似乎转换仅适用于一个数据集,而不适用于另一个数据集。

基本上,为了模拟数据更新,我用setInterval这种方式调用一个函数:

 function test(){
     d3.select('#vis')
     .datum(data2)
     .call(cluster);
 }

 setInterval(test, 1500);

...我以这种方式添加了过渡:

 c.exit().transition()
     .duration(700)
     .attr("r", function(d){ return 0; })
     .remove();

您可以在文件底部找到数据更新部分,并在第 431 行找到退出转换处理。

你能检查一下有什么问题吗?

4

1 回答 1

2

您看到的行为是由 D3 中的数据匹配方式引起的。对于其中一个数据集,所有数据元素都与现有 DOM 元素匹配,因此exit选择为空——您只需更新现有元素的位置、尺寸等。

“解决”这个问题的方法是明确告诉 D3 你希望如何匹配数据——例如将第 424 行更改为

.data(nodes, function(d) { return d.name; });

它将比较name以确定数据元素是否由 DOM 元素表示。在这里修改了 jsfiddle 。

于 2013-11-06T16:17:30.407 回答