d3 .js 在v5 版本新增了一个函数join()
在v4 版本中
var myData = [ 10, 40, 30, 50, 20 ];
var u = d3.select('.container').selectAll('circle')
.data(myData);
u.enter()
.append('circle')
.merge(u)
.attr('r', function(d) { return d; });
u.exit()
.remove();
v5 版本可以简话成.join('element') 自动处理 enter 和 exit
var myData = [ 10, 40, 30, 50, 20 ];
d3.select('.container')
.selectAll('circle')
.data(myData)
.join('circle')
.attr('r', function(d) { return d; });
在V5版本中我们希望处理元素如何进入和如何退出 列如,我们希望元素
使用.enter()和.exit()功能允许你这样做,但如果我们使用5版中的,使用.join()改怎么办?
答案是.join()具有三个参数,每个参数都是一个处理输入,更新和退出元素的函数。
var myData = [10, 40, 30, 50, 20];
var circleSpacing = 100;
var transitionDuration = 500;
d3.select('g.container')
.selectAll('circle')
.data(myData)
.join(
function(enter) {
return enter
.append('circle')
.style('opacity', 0);
},
function(update) {
return update;
},
function(exit) {
return exit
.transition()
.duration(transitionDuration)
.attr('r', 0)
.style('opacity', 0)
.attr('cx', 1000)
.on('end', function() {
d3.select(this).remove();
});
}
).attr('cx', function(d, i) {
return i * circleSpacing;
})
.transition()
.duration(transitionDuration)
.attr('r', function(d) {
return d;
})
.style('opacity', 1);
D3.js的优点,数据绑定是,它提供.enter()和.exit()功能,使细粒在进入和退出元件控制。
随着版本5的到来,.join()我们已经展示了如何仍然可以通过将函数传递到中来控制进入和退出元素.join()。