繁体   English   中英

D3过渡无法正常工作

[英]D3 transition not working as intended

我希望D3图表上的条形从底部开始增长。 我知道我需要在过渡之前将height设置为零,将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");

好吧,我刚刚与Mike Bostock聊天,他指出了问题所在。 在完整的代码中,还有一个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; });
});

另外,麦克给了我非常深刻的反馈。 他不建议像我在这里那样使用过渡。 他说,这会引起分心和延误,而且信息不足。 在数据集之间切换时最好保持过渡( 对象常量 )。 复习后,我必须同意,因此我将不会将此动画视为可视化效果的美学特性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM