重启D3条形图动画
Restart D3 bar chart animation
我正在开发一个小部件,它在滑动轮播中一个接一个地显示具有不同值的多个 D3
条形图。
当页面加载时,条形图会正常播放,但是当页面转到下一个图表时 - 无论是点击还是单独播放 - 我希望它每次都重新启动动画。
我试过在控制台中调用 animateChart()
,但这不起作用。
我正在寻找可以从控制台或其他函数调用的函数,例如 animateChart()
,它将重新加载 D3
条形图动画。
这是我的小工具 link:
我找到了可以增强 animateChart
功能的地方。
事实上,您只修改了进入您的图表的数据。
通过调用:
d3.select(svg)
.selectAll("rect")
.data(data)
.enter().append("rect")
[...]
此后的所有内容仅适用于新数据。
您可能需要阅读这些内容以了解 D3 中数据更新遵循的模式。
这是我的截图http://jsfiddle.net/uknynmqa/1/
我已经删除了您在所有 svg 上所做的循环,因为我假设您只想为当前的 svg 制作动画。
并且您的函数正在更新所有数据,而不仅仅是那些由于 :
而输入的数据
// 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);
我正在开发一个小部件,它在滑动轮播中一个接一个地显示具有不同值的多个 D3
条形图。
当页面加载时,条形图会正常播放,但是当页面转到下一个图表时 - 无论是点击还是单独播放 - 我希望它每次都重新启动动画。
我试过在控制台中调用 animateChart()
,但这不起作用。
我正在寻找可以从控制台或其他函数调用的函数,例如 animateChart()
,它将重新加载 D3
条形图动画。
这是我的小工具 link:
我找到了可以增强 animateChart
功能的地方。
事实上,您只修改了进入您的图表的数据。
通过调用:
d3.select(svg)
.selectAll("rect")
.data(data)
.enter().append("rect")
[...]
此后的所有内容仅适用于新数据。
您可能需要阅读这些内容以了解 D3 中数据更新遵循的模式。
这是我的截图http://jsfiddle.net/uknynmqa/1/
我已经删除了您在所有 svg 上所做的循环,因为我假设您只想为当前的 svg 制作动画。
并且您的函数正在更新所有数据,而不仅仅是那些由于 :
而输入的数据// 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);