我正在使用 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);
});
我试图添加一些调试语句来弄清楚发生了什么,但我只能看到,当它发生时,退出选择有 4 个元素,而不是 3 个 - 我不明白为什么会这样。
有没有办法,无论是在 D3 还是在基本的 JavaScript 中,我都可以确保转换不会重叠?