如何使用javascript将从for循环生成的SVG彼此堆叠在一起?

如何使用javascript将从for循环生成的SVG彼此堆叠在一起?,javascript,for-loop,d3.js,svg,Javascript,For Loop,D3.js,Svg,到目前为止,这就是我所知道的,问题是每次生成svg时,它们不会堆叠在一起形成动画效果,而是堆叠在一起或下面,有人知道如何解决这个问题吗?还有人知道我如何使圆圈从容器底部而不是顶部出现吗?提前谢谢 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Animation</title> <script src

到目前为止,这就是我所知道的,问题是每次生成svg时,它们不会堆叠在一起形成动画效果,而是堆叠在一起或下面,有人知道如何解决这个问题吗?还有人知道我如何使圆圈从容器底部而不是顶部出现吗?提前谢谢

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Animation</title>
    <script src="https://d3js.org/d3.v4.min.js"></script>
    <style> 
    </style>
  </head>
  <body>
      </svg>
    <script>

  var height1 = 0;

    for (let height1 = 0; height1 < 20; height1 ++) {
    setTimeout(function timer(){
      console.log(height1)

      //make SVG container
      var svgContainer = d3.select("body").append("svg")
                                        .attr("width", 100)
                                        .attr("height", height1);
      //Draw circle 
      var circle = svgContainer.append("circle")
                              .attr("cx", 50)
                              .attr("cy", 50)
                              .attr("r", 50);
    }, height1*500)


    }

    </script>
  </body>
</html>

动画
var height1=0;
对于(让高度1=0;高度1<20;高度1++){
setTimeout(函数计时器(){
控制台日志(高度1)
//制作SVG容器
var svgContainer=d3.select(“body”).append(“svg”)
.attr(“宽度”,100)
.attr(“高度”,高度1);
//画圈
var circle=svgContainer.append(“circle”)
.attr(“cx”,50)
.attr(“cy”,50)
.attr(“r”,50);
},高度1*500)
}

无论您想做什么(这一点还不清楚,主要是因为有很多方法可以正确创建动画),代码的问题在于您在每个循环中都附加了一个新的SVG

相反,只需附加一次SVG并更改其高度:

var高度1=0;
var svgContainer=d3.select(“body”).append(“svg”)
.attr(“宽度”,100);
对于(让高度1=0;高度1<20;高度1++){
setTimeout(函数计时器(){
//制作SVG容器
svgContainer.attr(“高度”,高度1);
//画圈
var circle=svgContainer.append(“circle”)
.attr(“cx”,50)
.attr(“cy”,50)
.attr(“r”,50);
},高度1*500)
}

要补充Gerardo Furtado的回答,请注意脚本中的这两个
高度1
变量。我猜你不打算要两个

一个是在脚本的顶部范围内声明
var
;另一个是用
let
声明的,并且是循环的本地。我坚持认为它们是两个不同的变量,我建议您删除用
var
声明的变量