【问题标题】:How to make d3 area transition originate from bottom如何使d3区域过渡从底部开始
【发布时间】:2014-04-18 02:53:41
【问题描述】:

如何使区域的过渡起源于 svg 的底部而不是顶部?使用此区域函数更改高度时,它将从顶部开始。

area: function(width, height) {
    var x = this.xScale(width),
        y = this.yScale(height);

    return d3.svg.area()
           .x(function(d) { return x(d.x); })
           .y0(height)
           .y1(function(d) { return y(d.y); });
}

过渡到新高度h

var area = this.area(w, h);

svg.datum(data)
           .transition()
           .ease('linear', 1, .3)
           .duration(1000)
           .attr('d', area);

我找到了这个 SO 问题,但无法将其转化为我的问题:

D3.js Transitions

更新

这里是代码:http://jsfiddle.net/g3yS5/12/

区域 a1 位于顶部,当过渡到 a2 时,它从上到下推动。我想问题的解决方案包括让该区域最初渲染到底部?如果是这样,我该怎么做?

【问题讨论】:

  • 您是说第一次从无路径过渡到渲染路径时会出现有问题的动画吗?还是在从一个渲染路径到另一个渲染路径的任意过渡期间?
  • @meetamit 两个州之间的数据保持不变,我正在将区域更改为新的高度。

标签: d3.js


【解决方案1】:

this是你想要的吗?

svg.select('path')
    .datum(data)
    .attr('transform', 'translate(0, 80)') // <---- here
    .transition()
    .ease('linear', 1, .3)
    .duration(1000)
    .attr('transform', 'translate(0, 0)') // <---- then here
    .attr('d', a2);

它首先将路径转换为新高度的底部,然后将其转换回其自然位置(注意:转换被硬编码为 80;您可能希望根据高度增量来计算它) .这会导致路径跳转到新位置,这可能是您所期望的。

否则,您也可以分两步进行过渡。 See this jsFiddle.

【讨论】:

  • 我希望该区域在过渡之前位于底部,即使在附加路径时我也会进行翻译。谢谢:)
【解决方案2】:

过渡从您当前正在制作动画的属性的任何值开始,因此您可以在过渡开始之前简单地更改该值:

svg.datum(data)
    .attr('d', startingArea) // set initial 'state'
  .transition().ease('linear', 1, .3).duration(1000)
    .attr('d', area);

在这种情况下,startingArea 可能看起来很像您现有的area 函数,但y0 可能是0,或者y1 可能是height。我必须查看您的代码以获得更具体的解决方案。

【讨论】:

  • 嗯,这就是我正在做的事情,我将第二个区域的高度更改为更大的值。看看我链接的 SO 问题中的示例。我也有同样的问题,但有一个区域。
  • @amiawizard 你想完成什么?
  • 我已经完成了我所需要的,只需要在转换之前将该区域转换到 svg 的底部,这样它就不会在转换过程中向下推。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多