【问题标题】:Simple path transition简单的路径过渡
【发布时间】:2012-11-04 16:19:02
【问题描述】:

我正在尝试实现一个简单的路径转换,如here 所示。我不是 javascript 也不是 d3 魔术师,所以我尽力做到最好:

var line = d3.svg.line()
    .x(function(d) { return x(d.date); })
    .y(function(d) { return y(d.price); });

svg.append("path")
  .datum(data)
  .attr("class", "line")
  .attr("d", line)
  .transition().duration(next.duration||1000).delay(next.delay||0); # not right

如何让转换正常工作?

【问题讨论】:

标签: javascript d3.js


【解决方案1】:

在 d3 中进行路径绘制动画的一种方法是使用 dash-array 和 dash-offset 属性。

您可以将 dashoffset 设置为总路径长度,然后随着时间的推移减小 dashoffset 直到它为零。这将模拟正在绘制的路径。查看stroke-dasharraystroke-dashoffset 上的SVG 文档。

从概念上讲,您正在做的是:

假设您的行长 4 个单位 (----)。您将 dasharray 设置为 (----,,,,) 即四个单位,然后是四个空格。您将 dashoffset 设置为 4 个单位,因此该线将位于可见空间左侧 4 个单位处。然后,当您将 dashoffset 减小到 0 时,线条将看起来像 (-,,,,),然后是 (--,,,,),依此类推,直到绘制整条线。

var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.price); });

var path = svg.append("path")
                  .attr("d", line(data))
                  .classed("line", true);

var pathLength= path.node().getTotalLength();

path
  .attr("stroke-dasharray", pathLength + " " + pathLength)
  .attr("stroke-dashoffset", pathLength)
  .transition()
  .duration(2000)
  .ease("linear")
  .attr("stroke-dashoffset", 0);

-

Duopixel's帖子here学习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多