使用Javascript创建SVG图形?

时间:2009-06-23 19:37:05

标签: javascript graphics svg

如何使用Javascript创建SVG图形?

所有浏览器都支持SVG吗?

13 个答案:

答案 0 :(得分:33)

查看this list on Wikipedia哪些浏览器支持SVG。它还提供了脚注中更多细节的链接。例如,Firefox支持基本的SVG,但目前缺少大多数动画功能。

有关如何使用Javascript创建SVG对象的教程可以找到here

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"); 

答案 1 :(得分:24)

这个答案来自2009年。

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 specification描述了所有SVG元素的DOM接口。例如,上面创建的SVGCircleElement具有中心点和半径的cxcyr属性,可以直接访问。这些是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);

答案 2 :(得分:18)

要进行跨浏览,我强烈推荐RaphaelJS。它有一个很好的API,在IE中做VML,无法理解SVG。

答案 3 :(得分:9)

除IE以外的所有现代浏览器都支持SVG

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

  

SVG Scripting with JavaScript Part 1: Simple Circle

就像Boldewyn已经说过的那样,如果你想要

  

要进行跨浏览,我强烈推荐RaphaelJS:rapaheljs.com

虽然现在我觉得图书馆的大小太大了。它有许多很棒的功能,其中一些你可能不需要。

答案 4 :(得分:7)

我非常喜欢jQuery SVG库。每次我需要使用SVG操作时它都会帮助我。它真正促进了使用JavaScript的SVG工作。

答案 5 :(得分:4)

我发现没有编译答案,所以创建圈子并添加到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>
&#13;
&#13;
&#13;

答案 6 :(得分:2)

不是并非所有浏览器都支持SVG。我相信IE需要一个插件才能使用它们。由于svg只是一个xml文档,JavaScript可以创建它们。我不确定是否将它加载到浏览器中。我没试过。

此链接包含有关javascript和svg的信息:

http://srufaculty.sru.edu/david.dailey/svg/SVGAnimations.htm

答案 7 :(得分:2)

有一个jQuery插件,允许你通过Javascript操作SVG:

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

从其介绍:

  

在Firefox,Opera中原生支持,   和Safari以及通过Adobe SVG   IE浏览器中的查看器或Renesis播放器,SVG   让你在你的内容中显示图形   网页。现在你可以轻松驾驶   来自JavaScript的SVG画布   代码。

答案 8 :(得分:2)

You can use d3.js. It is easy to use and powerful.

D3.js是一个用于根据数据操作文档的JavaScript库。 D3帮助您使用HTML,SVG和CSS将数据变为现实。

答案 9 :(得分:2)

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

目前所有最新版本的浏览器都支持SVG v1.1。 SVG v2.0正处于工作草案中,使用起来还为时过早。

本文介绍如何使用Javascript与SVG交互,并引用了浏览器支持的链接。 Interfacing with SVG

答案 10 :(得分:0)

IE 9现在支持基本的SVG 1.1。这是时候了,虽然IE9仍远远落后于谷歌Chrome和Firefox SVG的支持。

http://msdn.microsoft.com/en-us/ie/hh410107.aspx

答案 11 :(得分:0)

因此,如果你想在JS中逐个构建你的SVG东西,那么不要只使用createElement(),那些不会绘制,而是使用它:

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

答案 12 :(得分:0)

当前所有主流浏览器support svg。在JS中创建svg非常简单

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

function createSVG() {
  box.innerHTML = `
    <svg viewBox="0 0 400 100" >
      <circle id="circ" cx="50" cy="50" r="50" fill="red" />
    </svg>
  `;
}

function decRadius() {
  r=circ.getAttribute('r');
  circ.setAttribute('r',r*0.5);
}
<button onclick="createSVG()">Create SVG</button>
<button onclick="decRadius()">Decrease radius</button>
<div id="box"></div>