代码之家  ›  专栏  ›  技术社区  ›  tic

D3中的光滑递归变换

  •  1
  • tic  · 技术社区  · 7 年前

    我已经创建了一个简单的过渡,它在最后会自动恢复。为什么它是干的,如何才能使它顺利(J桥 here

        var circle = svg.append('circle')
        .attr("r",10)
        .attr("cx",10)
        .attr("cy",10)
        .style("fill","red");
    
        go()
    
        function go() {
            var c=svg.select("circle");
            c
            .transition()
            .duration(1000)
            .attr("cx",1*c.attr("cx")+10)
            .on("end",go);
    
        }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   XCS    7 年前

    这是因为默认情况下,过渡缓和函数不是线性的,而是线性的 . 将缓和函数设置为“线性”可解决此问题:

        function go() {
            var c=svg.select("circle");
            c
            .transition()
            .ease(d3.easeLinear) // <-- THIS WAS ADDED
            .duration(1000)
            .attr("cx",1*c.attr("cx")+100)
            .on("end",go);
    }
    

    d3-transition docs :

    如果未指定缓和函数,则默认为d3.0。

    为什么口吃是因为 ,对象开始缓慢移动,然后缓慢停止。您可以在此处看到缓解效果: https://easings.net/#easeInOutCubic

    FIXED DEMO (with linear easing)

    推荐文章