[英]How to update the Y domain with a transition in D3.JS?
我必须显示一个不断增长的折线图,该折线图每100毫秒更新一次。 我找到一种方法来正确更新数据:
path
.attr("d", line)
.attr("transform", null)
.transition()
.duration(100)
.ease("linear")
.attr("transform", "translate(" + x(0) + ",0)")
.each("end", tick);
但是我对Y轴域有问题。
我这样定义我的Y轴:
var y = d3.scale.linear()
.domain([-1, 1])
.range([height, 0]);
然后在每次刷新时使用指令进行更新:
y.domain([avg - 10, avg + 10])
它有效,但是我的剪辑效果不好。
演示: https : //jsfiddle.net/j499oy0e/
如何通过过渡或类似方法将其删除?
我建议不要使用javascript提供的requestAnimationFrame()来监听过渡的“结束”事件并再次调用tick()函数,这将有助于使动画更加平滑。 如果按如下所示设置刻度功能:
function tick(){
requestAnimationFrame(tick);
//...rest of the code
}
将会发生的是,requestAnimationFrame将等待当前的“绘图”完成,然后再调用传递给它的函数(函数本身)。 添加此更改并从路径选择中删除“ .each”后,您可能会注意到动画的fps可变(取决于许多因素)。 可以很容易地控制此动画的fps。 您可以按照以下说明进行操作: 使用requestAnimationFrame控制fps?
另外,请尝试完全删除过渡,看看是否更喜欢
path
.attr("d", line)
.attr("transform", "translate(" + x(0) + ",0)");
希望这就是您想要的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.