Animation 带数据连接的动画d3
我正在尝试设置数据联接的动画。我可以改变和更新状态,但是状态之间没有任何无缝的动画 我试着引用这个来回答我的问题: 这个数据是在json加载时创建的…然后,点击一个按钮,我只是简单地将20(用于测试目的)添加到我的y值中…它会更新,但没有转换。我选错了什么 变量栏已全局定义Animation 带数据连接的动画d3,animation,d3.js,Animation,D3.js,我正在尝试设置数据联接的动画。我可以改变和更新状态,但是状态之间没有任何无缝的动画 我试着引用这个来回答我的问题: 这个数据是在json加载时创建的…然后,点击一个按钮,我只是简单地将20(用于测试目的)添加到我的y值中…它会更新,但没有转换。我选错了什么 变量栏已全局定义 function btnClick(){ //bar.exit().remove(); bar = chart.selectAll("g") .data(
function btnClick(){
//bar.exit().remove();
bar = chart.selectAll("g")
.data(mydata.players)
console.log(bar.data(mydata.players))
bar.exit().remove()
bar.enter().append("g")
.transition()
.duration(1650)
.attr("transform", function (d) {
return "translate(" + x(d.name) + ",0)";
});
bar.append("rect")
.attr('width', x.rangeBand())
.attr("y", function (d) {
return y(d.money+20)
})
.attr("height", function (d) {
return height - y(d.money+20);
})
尝试在高度更改之前移动过渡:
chart.selectAll("g")
.data(mydata.players);
bar.exit().remove();
bar.attr("transform",
function(d) {
return "translate(" + x(d.name) + ",0)";
});
bar.append("rect")
.attr('width', x.rangeBand())
.transition()
.attr("y", function(d) {
return y(d.money + 20)
})
.attr("height", function(d) {
return height - y(d.money + 20);
})
我想我只是没有在btnClick()中为bar选择正确的选项。也许我不应该抓住所有的“g”元素?这个条是在json加载之前定义的,所以我不确定我是否应该通过选择所有的g元素来再次定义它……如果它已经构建好的话。我已经存储了它,应该能够对它进行操作:但是如果我没有定义它,那么出于某种原因,exit.remove()无法工作。好的,我对代码做了一些必要的小修改,以使其工作。因此,有两件事需要注意:
bar.select("rect")
.attr('width', x.rangeBand())
.transition().duration(750).ease("linear")
.attr("y", function (d) {
return y(d.money + 20)
})
.attr("height", function (d) {
return height - y(d.money + 20);
})
这是完整的。您正在对输入选择进行转换…您只需在更改高度之前将其移动到更新选择即可。此外,更新不需要输入选择。只需再次选择元素并更改属性。这不太管用。我想这是因为我在追加新的rect而不是使用当前的rect?是的,不要追加新的rect…只需执行
bar.attr即可(…
。如果您仍然存在问题,请创建一个提琴,以便于调查。是的。我尝试过这一点……不幸的是,如果我删除该行,条形图高度甚至没有任何变化。单击时没有更新。出于某些原因,它需要新的矩形。我在此处添加了一个JSFIDLE链接:
y.domain([0, d3.max(mydata.players, function (d) {
return d.money + 20;
})])