javascript - 堆积条形图过渡

标签 javascript d3.js

我正在尝试在水平堆叠条形图中一一获取条形过渡。但每个小节同时开始。

rects = groups.selectAll('stackedBar')
  .data(function(d,i) {
    console.log("data", d, i);
    return d;
  })
  .enter()
  .append('rect')
    .attr('class','stackedBar')
    .attr('x', function(d) { return xScale(d.x0); })
    .attr('y', function(d, i) {return yScale(d.y); })
    .attr('height', function(d) { return yScale.rangeBand(); })
    .attr('width', 0)
      .transition()
      .delay(function(d, i){
        console.log('hi', d, i);
        return i * 500;
      })
      .attr("width", function(d) { return xScale(d.x); })
      .attr("x", function(d) { return xScale(d.x0); })
      .duration(1000);

如何让它一张一张地变成动画?谢谢!

jsFiddle

最佳答案

你已经快到了——你需要使用 .delay() 来实现这一点,就像你已经在做的那样。唯一的问题是您使用的是嵌套选择(即 g 内的 rect),并且您获得的索引是内部选择的索引。它始终为 0,因为每个 g 只有一个 rect

要使其正常工作,请在嵌套选择中引用 secret 的第三个参数,它是传递给父级的数据中的索引:

.delay(function(d,i,j){console.log('hi',d,j); return j*500;})

这将为您提供 g 元素的索引。完整示例 here .

关于javascript - 堆积条形图过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146039/

相关文章:

javascript - 使用新数据的 D3 donut 将无法正确绘制

javascript - 如何通过 socket.io 将 Node js 后端上的 Set 发送到前端?

javascript - macOS Safari 问题(getUserMedia)以 Angular 6 从摄像头获取视频流 - NotReadableError : The I/O read operation failed

javascript - d3.json() 函数返回未定义

javascript - d3.js 是否支持动态 Sunbursts

javascript - 比例返回负值

javascript - d3 设置图像 visibility=hidden onerror

javascript - Angularjs jquery 状态之间的绑定(bind)

javascript - ValidationPipe() 不适用于 Nestjs/Crud 中的重写 @Query

javascript - 定义变量时,它们在 firebug 中显示为未定义