定义了绘制函数以便重用,但这是独立的语句。
draw(circles);
有没有办法将绘图功能放回D3的功能链中(重写)?
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.draw(???) //not work.
这是代码。工作版本为here
<body>
<script type="text/javascript">
var draw = function (circles) {
circles.attr("cx", function (d, i) {
return (i * 50) + 25;
})
.attr("cy", h / 2)
.attr("r", function (d) {
return d;
});
};
var w = 500, h = 50;
var dataset = [5, 10, 15, 20, 25];
var dataset2 = [25, 20, 15, 10, 5];
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var circles = svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
draw(circles);
var circles2 = svg.selectAll("circle")
.data(dataset2)
.transition()
.duration(2000);
draw(circles2);
</script>
</body>
最佳答案
在draw()中使用call()+ this。
工作版本为here
var draw = function () {
this.attr("cx", function (d, i) {
return (i * 50) + 25;
})
.attr("cy", h / 2)
.attr("r", function (d) {
return d;
});
};
circles
.data(dataset)
.enter()
.append("circle")
.call(draw)
.data(dataset2)
.transition()
.attr("fill", "red")
.duration(2000)
.call(draw);