gpt4 book ai didi

javascript - D3线路径更新动画不流畅

转载 作者:行者123 更新时间:2023-11-29 14:58:38 24 4
gpt4 key购买 nike

我有一个由区域、线条和圆组成的图表,我试图根据用户输入更新这些图表,我已经开始工作了,但是当从较低的数据量过渡到较高的数据量时,比如 [4,2,3,4,5][2,4,3,1,5,8,6],这些线条将它们当前的路径动画化到它们的新位置,但偏移量只是捕捉到位,添加到路径的任何新值都没有动画。

我希望它做的是从当前线路径到新线路径的动画,平滑过渡,这样新值就不会卡入到位,无论数据数量如何。

另外,附带说明一下,图形宽度在更新时不断变化,我希望它能够拉伸(stretch)到 svg 的整个宽度,无论存在多少数据,我该如何实现?

这是我到目前为止的一小部分 http://jsfiddle.net/znmBy/ .

我希望我已经足够清楚了,我是 D3 的新手,所以我对术语有点不确定。

最佳答案

您描述的问题有点复杂,因为在 D3 中您首先必须在固定位置 添加一个对象,然后您可以将其从原始位置动画化到另一个位置。

在您的示例中,我会根据先前的值计算新的(中间)初始位置,然后使用真实的最终值再次更新图表。这将创建一个从开始到最终位置的漂亮路径动画:

    updateGraph([
[...].concat(computeLatestIntermediates()),
[...].concat(getLatestTimes())
]);

updateGraph([
[...].concat(getRealValues()),
[...].concat(getLatestTimes())
]);

或者,您可以将初始值设置为 0。这将创建一个从底部到目标值的漂亮动画:

    updateGraph([
[..., 0, 0, 0, 0],
[...,10,12,13,14]
]);

updateGraph([
[..., 234, 245, 210, 170],
[..., 10, 12, 13, 14]
]);

顺便说一句:在制作折线图动画时,您通常会遇到其他几个问题。 Mike 的 path animation page 涵盖了其中一些内容.还有一个相关的问题here .

编辑(更智能的解决方案):

您可以像这样在绘图函数中实现这个两步绘图,而不是调用更新函数两次:

function getPathData(d,i)        { return "M 0,0 ... L n,n"; }
function getInitalTransform(d,i) { return "translate(...)"; }
function getFinalTransform(d,i) { return "translate(...)"; }

path
.attr("d", getPathData)
.attr("transform", getInitalTransform)
.transition()
.ease("linear")
.attr("transform", getFinalTransform);

关于javascript - D3线路径更新动画不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13740182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com