D3的抽象仍然让我的思绪弯曲,所以希望我能正确地呈现这一点.
在D3 版本3中,给定一个元素(比如一个圆圈),并且只给出一个可能在每个元素上运行的转换,确定该元素当前运行转换的最佳方法是什么,如果有的话?
我知道我可以手动检查__transition__元素(虽然也有欢迎帮助),但我真的希望有更高级别的东西.
我在这里的更大目标是创建一个子转换if-only-only-if如果有转换到sub.否则,我将创建一个新的过渡.
我正在和D3.js一起工作 我有很好的转换工作,但我只有一个问题:如果第二次转换在第一次转换结束之前开始,
这是一个证明问题的JSFiddle:http://jsfiddle.net/kqxhj/11/
它在大多数情况下都能正常工作 - 随着数据的变化,CDG和LAX会被追加和删除 - 但如果你快速连续点击两次按钮,你会发现新的元素没有出现.
这是我的代码的核心:
function update(data) {
var g = vis.selectAll("g.airport").data(data, function(d) {
return d.name;
});
var gEnter = g.enter().append("g")
.attr("class", function(d) {
return "airport " + d.name;
});
// Perform various updates and transitions...
[...]
// Remove exited elements.
g.exit().transition()
.duration(1000)
.attr("transform", "translate(0," + 1.5*h + ")");
g.exit().transition().delay(1000)
.remove();
}
d3.select('#clickme').on("click", function() {
update(current_data);
});
Run Code Online (Sandbox Code Playgroud)
我试图添加一些调试语句来弄清楚发生了什么,但我只能看到,当它发生时,退出选择有4个元素,而不是3 - 我不明白为什么会这样.
有没有办法,无论是在D3还是在基本的JavaScript中,我都可以确保转换不重叠?