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

线图线动画

  •  2
  • ttmt  · 技术社区  · 6 年前

    我在这里有一个斯塔克布利茨- https://stackblitz.com/edit/simple-line-chart?embed=1&file=src/app/bar-chart.ts&hideNavigation=1

    它是一个使用D3的简单线图

    我想把这条线从左到右做成动画。

    找不到很多这样或那样的解释

    实际的图形也将有一个条形图,所以我不能动画和白色块在上面显示行

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gerardo Furtado    6 年前

    为什么要在函数、插值函数和 this ?

    stroke-dasharray 以及 stroke-dashoffset

    var totalLength = thisLine.node().getTotalLength();
    
    thisLine.attr("stroke-dasharray", totalLength + " " + totalLength)
        .attr("stroke-dashoffset", totalLength);
    

    然后用一个简单的转换来改变它:

    thisLine.transition()
        .duration(1000)
        .attr("stroke-dashoffset", 0);
    

    不需要用粗花呢 笔划dasharray

    这是分叉码: https://stackblitz.com/edit/simple-line-chart-3hpaje?file=src/app/bar-chart.ts

        2
  •  2
  •   rioV8    6 年前

    一切都是 this 问题。

      private transition(path) {
        var that = this;
          path.transition()
            .duration(2000)
            .attrTween("stroke-dasharray", that.tweenDash);
      }
    
      private tweenDash() {
        var l = this.getTotalLength(),
            i = d3.interpolateString("0," + l, l + "," + l);
        return function (t) { return i(t); };
      }
    
      private drawLine(linedata:any){
        // ....
    
        var p = this.lineArea.append("path")
          .attr("class", "line")
          .attr("d", valueline(linedata))
          .attr("stroke-linejoin", "round")
          //.call(that.transition)
          ;
        this.transition(p);
      }
    

    为什么我们需要 i ?

      private tweenDash() {
        var l = this.getTotalLength();
        return d3.interpolateString("0," + l, l + "," + l);
      }