我發現在那裏你可以提高你的animateChart
功能。
其實你只修改那名enterring您的圖形數據。
通過調用:
d3.select(svg)
.selectAll("rect")
.data(data)
.enter().append("rect")
[...]
一切在這之後,將只適用於新的數據。
您可能需要閱讀這些瞭解遵循與D3的數據更新模式。
這是我現在的投籃http://jsfiddle.net/uknynmqa/1/
我已經刪除你在做你所有的SVG的循環,因爲我認爲你想只能動畫當前的動畫。
而且你的功能更新所有數據,而不僅僅是enterring感謝:
// Update the data for all
var join = d3.select(svg)
.selectAll("rect")
.data(data);
// Append new data.
join.enter().append("rect")
.attr("class", function (d, i) {
var low = ""
i == minIndex ? low = " low" : "";
return "bar" + " " + "index_" + i + low;
})
// Update everyone.
join.attr("width", barWidth)
.attr("x", function (d, i) {
return barWidth * i + barSpace * i;
})
.attr("y", chartHeight)
.attr("height", 0)
.transition()
.delay(function (d, i) {
return i * 100;
})
.attr("y", function (d, i) {
return chartHeight - y(d);
})
.attr("height", function (d) {
return y(d);
});
D3是下面一個非常具體的數據更新模式。
取決於你想做什麼,你可以按照這個。這取決於你想要製作動畫或不製作。
// Link data to your graph and get the join
var join = svg.selectAll('rect')
.data(data);
// Update data already there
join.attr('x', 0);
// Append the new data
join.enter().append('rect')
.attr('x', 0);
// Remove exiting elements not linked to any data anymore
join.exit().remove();
// Update all resulting elements
join.attr('x', 0);
你能不能在這裏粘貼代碼而不是指一個鏈接?或者在jsbin中重現。 – QuantumLicht
當然是的,在這裏你去: http://jsfiddle.net/alocdk/oa5tg1qu/1/ – alc