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

D3过渡动画问题:background-color生效但width无动画效果

解决D3.js条形图宽度过渡动画失效的问题

嘿,我一眼就揪出问题所在啦!你的条形图宽度没出现过渡动画,核心原因是CSS宽度值缺少单位。

你看,代码里设置宽度的时候写的是function(d){return d/2}和function(d){return d},但浏览器识别CSS长度值必须要有明确的单位(比如px),没有单位的话,浏览器会把这个值判定为无效样式,自然没法触发过渡动画。而颜色是直接使用关键字(grey、blue),不需要单位,所以颜色过渡能正常生效。

修改后的代码应该是这样的:

data=[100,200,400,350];
d3.select("#chart")
  .selectAll("div")
  .data(data)
  .enter()
  .append("div")
  .style("height", "30px") // 这里也建议加上单位,代码更规范
  .style("width", function(d){return (d/2) + "px"}) // 给宽度值添加px单位
  .style("background-color","grey")
  .transition()
  .style("width", function(d){return d + "px"}) // 过渡目标宽度同样添加px单位
  .style("background-color","blue");

另外补个小建议:如果后续数据范围变化较大,最好用D3的比例尺(比如d3.scaleLinear())来映射数据到宽度,这样能更灵活地适配容器大小,避免条形超出容器的情况~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:17:44