【发布时间】:2013-06-09 19:12:04
【问题描述】:
我正在使用流行的 d3 库的 V3,并且基本上希望有三个转换,依次为:第一个转换应该应用于退出选择,第二个转换到更新选择,第三个转换到进入选择。它们应该以这样的方式链接,即当其中一个选择为空时,跳过其各自的转换。 IE。当没有退出选择时,更新选择应该立即开始。到目前为止,我已经想出了这段代码(使用delay 函数)。
// DATA JOIN
var items = d3.select('#data').selectAll('.item');
items = items.data(data, function(d){
return d.twitter_screenname;
});
// EXIT
items.exit().transition().duration(TRANSITION_DURATION).style('opacity', 0).remove();
// UPDATE
// Divs bewegen
items.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 1)
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
// ENTER
// Divs hinzufügen
var div = items.enter().append('div')
.attr('class', 'item')
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
div.style('opacity', 0)
.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 2)
.style('opacity', 1);
首先它不允许“跳过”转换,其次我认为有比delay 更好的方法。我查看了http://bl.ocks.org/mbostock/3903818,但我并没有真正理解发生了什么。
此外,不知何故,仅编写 items.exit().transition().duration(TRANSITION_DURATION).remove() 不适用于 items,可能是因为它们不是 SVG 元素,而是 divs。
【问题讨论】:
标签: animation d3.js transition