使用Javascript创建SVG图形?


80

如何使用JavaScript创建SVG图形?

所有浏览器都支持SVG吗?


2
经过2年的svg开发可以说,这很不错,但是没有所有主流浏览器的全力支持,使用它不会更糟。如果您启动一个新应用,请选择另一种格式。
Kamarey

31
凡是阅读此问题和答案的人,请注意,自从2009年提出该问题以来,已经发生了许多变化,现在所有主要的浏览器都原生支持SVG(不需要polyfill)!
13年

1
这里是查看实际支持的浏览器的链接。caniuse.com/#feat=svg如今明确地保存为使用svg。
卢卡斯·里西斯

Answers:


30

看看这个名单在维基百科上关于该浏览器支持SVG。它还在脚注中提供了指向更多详细信息的链接。例如,Firefox支持基本的SVG,但目前缺少大多数动画功能。

可以在此处找到有关如何使用Javascript创建SVG对象的教程:

var svgns = "http://www.w3.org/2000/svg";
var svgDocument = evt.target.ownerDocument;
var shape = svgDocument.createElementNS(svgns, "circle");
shape.setAttributeNS(null, "cx", 25);
shape.setAttributeNS(null, "cy", 25);
shape.setAttributeNS(null, "r",  20);
shape.setAttributeNS(null, "fill", "green"); 

32
这是evt什么
2013年

@Aculeo:谢谢,固定。
schnaader 2015年

Firefox的任何解决方案了吗?
Dinesh

1
你应该真的解释一下evt。有关有效的解决方案,请参见themadmax的答案。
AldaronLau

24

答案是从2009年开始的。现在是社区Wiki,以防万一有人希望将其更新。

IE需要一个插件来显示SVG。最常见的是Adobe可以下载的一种。但是,Adobe不再支持或开发它。Firefox,Opera,Chrome,Safari都可以正常显示基本的SVG,但是如果使用高级功能(支持不完整),则会出现怪癖。Firefox不支持声明性动画。

可以使用javascript创建SVG元素,如下所示:

// "circle" may be any tag name
var shape = document.createElementNS("http://www.w3.org/2000/svg", "circle");
// Set any attributes as desired
shape.setAttribute("cx", 25);
shape.setAttribute("cy", 25);
shape.setAttribute("r",  20);
shape.setAttribute("fill", "green");
// Add to a parent node; document.documentElement should be the root svg element.
// Acquiring a parent element with document.getElementById() would be safest.
document.documentElement.appendChild(shape);

SVG规范描述了所有SVG元素的DOM接口。例如,SVGCircleElement,这是上面创建,具有cxcy以及r属性为圆心和半径,其可以被直接访问。这些是SVGAnimatedLength属性,具有baseVal正常值的animVal属性和动画值的属性。目前,浏览器无法可靠地支持该animVal属性。baseVal是SVGLength,其值由value属性设置。

因此,对于脚本动画,还可以设置这些DOM属性来控制SVG。以下代码应等同于上述代码:

var shape = document.createElementNS("http://www.w3.org/2000/svg", "circle");
shape.cx.baseVal.value = 25;
shape.cy.baseVal.value = 25;
shape.r.baseVal.value = 20;
shape.setAttribute("fill", "green");
document.documentElement.appendChild(shape);

5
这不再是正确的,应该更新或删除此答案。
DavidMårtensson2014年

18

为了跨浏览器做到这一点,我强烈推荐RaphaelJS。它拥有良好的API并在IE中执行VML,这无法理解SVG。


9

除IE之外的所有现代浏览器均支持SVG

这是一个教程,提供有关如何使用javascript处理SVG的逐步指南:

使用JavaScript的SVG脚本,第1部分:简单循环

就像Boldewyn已经说过的那样

为了跨浏览器做到这一点,我强烈推荐RaphaelJS:rapaheljs.com

尽管现在我觉得图书馆的规模太大。它具有许多很棒的功能,您可能不需要其中的一些功能。


“除IE以外的所有现代浏览器”?:)
tuomassalo

2
没有IE版本是现代的。对于SVG,IE(通过v11)不支持SMIL,因此请忘记任何有趣的动画!
Geek Stocks

7

我非常喜欢jQuery SVG库。每当我需要使用SVG进行操作时,它都会为我提供帮助。它确实促进了JavaScript中SVG的使用。


5

我没有找到符合要求的答案,因此要创建圈子并将其添加到svg,请尝试以下操作:

var svgns = "http://www.w3.org/2000/svg";
var svg = document.getElementById('svg');
var shape = document.createElementNS(svgns, "circle");
shape.setAttributeNS(null, "cx", 25);
shape.setAttributeNS(null, "cy", 25);
shape.setAttributeNS(null, "r",  20);
shape.setAttributeNS(null, "fill", "green");
svg.appendChild(shape);
<svg id="svg" width="100" height="100"></svg>



2

有一个jQuery插件,可让您通过Javascript操作SVG:

http://plugins.jquery.com/project/svg

从其简介:

通过Firefox,Opera和Safari原生支持,并通过IE中的Adobe SVG查看器或Renesis播放器,SVG允许您在网页中显示图形。现在,您可以轻松地从JavaScript代码驱动SVG画布。



2

使用Javascript的SVG图形上有多个库,例如:Snap,Raphael,D3。或者,您也可以直接将SVG与普通的javascript接口。

当前,所有最新版本的浏览器都支持SVG v1.1。SVG v2.0处于工作草案中,尚不成熟。

本文介绍了如何使用Javascript与SVG进行交互,并引用了有关浏览器支持的链接。与SVG接口



0

因此,如果您想在JS中逐个构建SVG素材,则不要只使用createElement(),那些不会绘制的东西,请改用此:

var ci = document.createElementNS("http://www.w3.org/2000/svg", "circle");

-1

当前,所有主流浏览器都支持svg。创建SVG的JS是非常简单的(目前innerHTML=...相当快

element.innerHTML = `
    <svg viewBox="0 0 400 100" >
      <circle id="circ" cx="50" cy="50" r="50" fill="red" />
    </svg>
`;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.