【问题标题】:D3.js chain transitions for compound animations for different shapesD3.js 用于不同形状的复合动画的链式转换
【发布时间】:2013-03-25 13:09:25
【问题描述】:

我要做什么...

我正在玩弄 D3 来制作复合动画。我有以下最终状态:

基本上我想要动画连接点 - 添加第一个 。然后将 line 绘制到第二个圆圈。绘制线后,添加第二个圆圈。

为了增加视觉吸引力,我执行了其他过渡,例如在绘制线条时更改第一个和第二个圆的 circle 半径。

我尝试过的...

我可以添加圆圈并单独绘制线条,包括动画。但是,我不确定如何继续将过渡链接在一起以形成复合动画。

我有read about transitions/animations,建议使用each("end")。虽然这可以绘制初始对象,但 end 直到其他转换之后才会触发。

问题

  • 使用each("end", ...) 是链接转换的正确方法吗?
  • 如何开始另一个动画(即开始画线),同时仍然允许另一个过渡完成(即第一个圆半径爆发)。

【问题讨论】:

  • 几天前,一个试图做同样事情的人在这里问了一个问题:stackoverflow.com/questions/15692910/…。我不知道他的方法是否是最惯用的方法,但它确实有效(但请参阅我对他的 Q 的回复以获取有效的 jsFiddle 链接)。
  • 除了显式链接过渡之外,您还可以使用delay() 函数来延迟后续动画的开始,直到前面的动画完成。
  • @meetamit,虽然很接近,但这不是同一个问题。我仍然很好奇如何将这些链接在一起。他似乎有一套动画,不一定相互依赖。
  • @Lars Kotthoff,我会调查的。但请记住,一些转换是并行运行的。因此,延迟不一定会全面发挥作用。
  • 只要你能确定每个过渡应该何时开始,它就应该如此。例如,如果您的线条是在 1 秒内绘制的,那么您会将绘制第二个圆的过渡延迟该时间。

标签: javascript animation d3.js transitions chained


【解决方案1】:

从 d3.v3 开始,过渡更容易链接,无需使用“end”。见注释here

比如看this one

rect.transition()
  .duration(500)
  .delay(function(d, i) { return i * 10; })
  .attr("x", function(d, i, j) { return x(d.x) + x.rangeBand() / n * j; })
  .attr("width", x.rangeBand() / n)
  .transition()
  .attr("y", function(d) { return y(d.y); })
  .attr("height", function(d) { return height - y(d.y); });

这是针对同一元素的过渡。对于不同的元素,请查看this one

// First transition the line & label to the new city.
var t0 = svg.transition().duration(750);
t0.selectAll(".line").attr("d", line);
t0.selectAll(".label").attr("transform", transform).text(city);

// Then transition the y-axis.
y.domain(d3.extent(data, function(d) { return d[city]; }));
var t1 = t0.transition();
t1.selectAll(".line").attr("d", line);
t1.selectAll(".label").attr("transform", transform);
t1.selectAll(".y.axis").call(yAxis);

过渡附加到 svg 元素并从那里链接起来。

【讨论】:

  • bl.ocks.org 必须有糟糕的 SEO。我整个下午都在搜索链式转换。感谢您的回答。
  • 您可以在此图库中搜索:biovisualize.github.io/d3visualization/#title=ChainedTransitions 或使用 Gist 搜索,因为 bl.ocks 是 Gist 查看器
  • 希望我能像 42 次一样支持这个答案。我似乎完全跟随@JasonMcCreary 的脚步。
  • 重新 SEO cmets,注意:链接 transitions,而不是 transitions
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
相关资源
最近更新 更多