You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

堆叠条形图高度过渡动画需求:实现从底部轴向上动画

解决堆叠条形图从底部轴向上展开的动画问题

你的问题出在初始状态的属性设置上——当前代码让矩形从顶部(y=0)向下拉伸,而不是从底部基线向上展开。咱们调整一下初始状态和过渡逻辑就能搞定:

修改后的代码

let layersBar = layersBarArea.selectAll('.layer').data(stackedSeries) 
 .enter() 
 .append('g') 
 .attr('class', 'layer') 
 .style('fill', (d, i) => colors[i]); 

layersBar.selectAll('rect') 
 .data(d => d) 
 .enter() 
 .append('rect') 
 // 初始状态:把矩形定位在底部基线,高度设为0(完全隐藏)
 .attr('y', y(0)) 
 .attr('height', 0) 
 // 先设置好x和宽度,避免这些属性参与动画
 .attr('x', d => x(d.data.date)) 
 .attr('width', x.bandwidth())
 .transition() 
 .duration(400) 
 // 过渡到目标位置和高度:从底部向上展开
 .attr('y', d => y(d[1])) 
 .attr('height', d => y(d[0]) - y(d[1]));

关键逻辑说明

  • 初始状态调整:
    把初始的y值设为y(0),这是堆叠条形图的底部基线位置(对应y轴的0值);同时将初始height设为0,让矩形一开始完全隐藏在基线位置。
  • 过渡动画逻辑:
    过渡时,把y从基线位置移动到当前堆叠层的顶部位置y(d[1]),同时把height从0增加到层的实际高度y(d[0]) - y(d[1])(因为D3的y轴通常是向上数值减小,所以用底部值减顶部值得到高度)。
  • 优化细节:
    把x和width的设置移到过渡之前,避免这些属性产生不必要的动画,让动画只聚焦在垂直方向的展开效果上。

这样修改后,你的堆叠条形图就会从底部轴向上平滑展开啦!

内容的提问来源于stack exchange,提问作者ttmt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:13:54