D3过渡不按预期工作

时间:2015-12-06 12:24:08

标签: javascript d3.js leaflet

我希望D3图表上的条形图从底部增长。我知道我需要在转换之前将高度设置为零,并将y设置为高度以获得该效果。

但是,在点击地图后绘制图表时,首先会加载条形图,然后从上到下绘制任何其他图表。我可以在下面的示例中重现这一点:在第一次单击时正确绘制图表,之后的任何其他单击,图表从上到下绘制。

据我所知,我已将其编码正确,因为在第一次点击时,条形图是从底部绘制的。我无法解释为什么在所有后续点击中,图表是从顶部绘制的。

JSfiddle:http://jsfiddle.net/Monduiz/44javxww/

点击过渡:

map.on('popupopen', function(e) {
    rects.transition()
    .delay(function (d,i){ return i * 80;})
    .duration(350)
    .attr("height", function(d) {return height - y(d.value);})
    .attr("y", function(d) {return y(d.value); });
});

转型前:

var rects = bar.append("rect")
    .attr("width", x.rangeBand())
    .attr("y", function(d) {return height; })
    .attr("height", 0)
    .attr("fill", "#1f78b4");

1 个答案:

答案 0 :(得分:1)

好吧,我刚和迈克博斯托克聊天,他指出了问题所在。在完整代码中,还有一个popupclose事件:

map.on('popupclose', function(e) {
    rects
    .attr("width", 0);
});

此代码仅将宽度重置为0,但Y也需要重置为高度。所以,这段代码正在解决这个问题:

map.on('popupclose', function(e) {
    rects
    .attr("width", 0)
    .attr("y", function(d) {return height; });
});

作为一个额外的奖励,迈克给了我非常有见地的反馈。他并不建议像我这里一样使用过渡。他说它引入了分心和延迟,而且没有提供信息。最好在数据集之间切换时保持转换(Object constancy)。 经过审核,我不得不同意所以我不会将这个动画作为我的可视化的美学属性。