javascript - 尝试制作一个 for 循环来绘制 SVG

标签 javascript svg

我刚开始学习 SVG,想创建一个 for 循环来在我的 HTML 中绘制许多圆圈。是否可以按照我尝试的方式完成,或者我尝试做的是不可能的?

<html>
<body>

<h1>My first SVG for loop</h1>

<script type="text/javascript">
    
    var circlex = 50; 
    var circley = 50;

    for (var i = 0; i < 100; i++) {

    <svg width="100" height="100">
         <circle cx="circlex + 1" cy="circley + 1" r="40" stroke="green" stroke-width="4" fill="yellow" />
    </svg>
    };

</script>

</body>
</html>

最佳答案

那么近又那么远

你不能将 html 代码直接放入 JavaScript 中(那会很酷)
JavaScript 添加新元素的方式是通过 DOM 操作。
那么让我们看一下代码:

  1. 首先创建一个带有 xmlns 的空 SVG 文档(只需设置 xmlns="http://www.w3.org/2000/svg",它在 99% 的时间内都有效)我们需要一个 ID 来选择元素。
  2. 在 JavaScript 中获取 SVG 元素:document.getElementById("svg_circles")。这里我们使用我们在元素上设置的 ID 将其保存到一个变量。
  3. 在 for 循环中:创建一个圆元素:var circle = document.createElementNS(NS, "circle"); 命名空间 NS 位于 1. 它是 http://www.w3.org/2000/svg。这看起来很复杂,但却是必需的,而且是您必须记住的东西。
  4. 设置圆形属性:现在设置属性:我使用 .setAttribute() 设置位置 cxcy。您可以尝试以不同的方式定位它们。 我还设置了大小 r 属性和填充(填充上的长行代码只是为了好玩,它会创建随机颜色)
  5. 现在我们已经完成了圆圈,但 JavaScript 代码不知道将它们放在哪里。所以我们告诉它:svgCircle.appendChild() 将元素设置为我们的 SVG 文档的子元素。所以:svgCircle.appendChild(circle); 其中 circle 是创建的 SVG 元素。

document.addEventListener("DOMContentLoaded", function(event) {
  var circlex = 0;
  var circley = 0;

  var svgCircle = document.getElementById("svg_circles");
  var NS = "http://www.w3.org/2000/svg";
  for (var i = 0; i < 100; i++) {
    var circle = document.createElementNS(NS, "circle");
    console.log(circle);
    circle.setAttribute("cx", circlex + i);
    circle.setAttribute("cy", circley + i);
    circle.setAttribute("r", 10);
    circle.setAttribute("fill", "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")");
    svgCircle.appendChild(circle);
  };
});
<svg id="svg_circles" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
</svg>

关于javascript - 尝试制作一个 for 循环来绘制 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34201318/

相关文章:

css - 如何在 SVG g 元素中居中放置文本?

svg - 如何获得笔划的轮廓?

javascript - 在客户端将 Svg 转换为 Png

javascript - Api PUT 请求显示为 "cancelled",错误消息为 "TypeError: failed to fetch"

javascript - 如何在等待 promise 解决时执行代码?

javascript - 首次调用时未显示 Bootstrap 模态

jquery - 从偏移到实际位置的动画点或点

javascript - 创建生产资源时 UglifyJS 出现 Webpack 错误

javascript - 如何在JavaScript中按名称选择ID?

image - SVG路径: pattern fill not working in firefox and Safari