gpt4 book ai didi

JavaScript createElementNS 和 SVG

转载 作者:行者123 更新时间:2023-12-02 23:12:14 24 4
gpt4 key购买 nike

我想使用 Javascript 创建内联 SVG 图形。

但是,看起来像createElementNS函数应用一些标准化并将所有标签转换为小写。这对于 HTML 来说很好,但对于 XML/SVG 来说就不行了。我使用的NS是http://www.w3.org/2000/svg .

特别是我在创建元素时遇到问题。因为它将被附加为 <textpath>因此不会工作。

我进行了一些搜索,但尚未找到解决方案。

有人知道解决办法吗?

document.createElementNS("http://www.w3.org/2000/svg","textPath");

结果

<textpath></textpath>

最佳答案

希望以下示例对您有所帮助:

function CreateSVG() {
var xmlns = "http://www.w3.org/2000/svg";
var boxWidth = 300;
var boxHeight = 300;

var svgElem = document.createElementNS(xmlns, "svg");
svgElem.setAttributeNS(null, "viewBox", "0 0 " + boxWidth + " " + boxHeight);
svgElem.setAttributeNS(null, "width", boxWidth);
svgElem.setAttributeNS(null, "height", boxHeight);
svgElem.style.display = "block";

var g = document.createElementNS(xmlns, "g");
svgElem.appendChild(g);
g.setAttributeNS(null, 'transform', 'matrix(1,0,0,-1,0,300)');

// draw linear gradient
var defs = document.createElementNS(xmlns, "defs");
var grad = document.createElementNS(xmlns, "linearGradient");
grad.setAttributeNS(null, "id", "gradient");
grad.setAttributeNS(null, "x1", "0%");
grad.setAttributeNS(null, "x2", "0%");
grad.setAttributeNS(null, "y1", "100%");
grad.setAttributeNS(null, "y2", "0%");
var stopTop = document.createElementNS(xmlns, "stop");
stopTop.setAttributeNS(null, "offset", "0%");
stopTop.setAttributeNS(null, "stop-color", "#ff0000");
grad.appendChild(stopTop);
var stopBottom = document.createElementNS(xmlns, "stop");
stopBottom.setAttributeNS(null, "offset", "100%");
stopBottom.setAttributeNS(null, "stop-color", "#0000ff");
grad.appendChild(stopBottom);
defs.appendChild(grad);
g.appendChild(defs);

// draw borders
var coords = "M 0, 0";
coords += " l 0, 300";
coords += " l 300, 0";
coords += " l 0, -300";
coords += " l -300, 0";

var path = document.createElementNS(xmlns, "path");
path.setAttributeNS(null, 'stroke', "#000000");
path.setAttributeNS(null, 'stroke-width', 10);
path.setAttributeNS(null, 'stroke-linejoin', "round");
path.setAttributeNS(null, 'd', coords);
path.setAttributeNS(null, 'fill', "url(#gradient)");
path.setAttributeNS(null, 'opacity', 1.0);
g.appendChild(path);

var svgContainer = document.getElementById("svgContainer");
svgContainer.appendChild(svgElem);
}
#svgContainer {
width: 400px;
height: 400px;
background-color: #a0a0a0;
}
<body onload="CreateSVG()">
<div id="svgContainer"></div>
</body>

关于JavaScript createElementNS 和 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com