使用 javascript 以编程方式创建 SVG 图像元素
就像我的标题所说,我正在尝试使用 JavaScript 在 HTML 页面中以编程方式创建 SVG 图像元素。由于某种原因,我的基本 JavaScript 代码无法正常工作,但是如果我使用 raphaeljs 库,它就可以正常工作。所以我的 js 显然有问题 - 我似乎无法弄清楚它是什么。
(注意:目标浏览器是 FF4+)
这是基本页面,其中包含我试图在顶部实现的 html 版本:
<html>
<head>
<script type="text/javascript" src="http://raphaeljs.com/raphael.js"></script>
</head>
<body>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="test1"
height="200px"
width="200px">
<image
id="testimg1"
xlink:href="http://i.imgur.com/LQIsf.jpg"
width="100"
height="100"
x="0"
y="0"/>
</svg>
<hr />
<p id="testP1">
</p>
<hr />
<p id="testP2">
</p>
</body>
</html>
这是我的 javascript:
var paper = Raphael(document.getElementById("testP1"), 200, 200);
paper.image("http://i.imgur.com/LQIsf.jpg", 0,0, 100, 100);
var svg = document.createElementNS('http://www.w3.org/2000/svg','svg');
svg.setAttributeNS('http://www.w3.org/2000/svg','xlink','http://www.w3.org/1999/xlink');
svg.setAttributeNS('http://www.w3.org/2000/svg','height','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','width','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','id','test2');
var svgimg = document.createElementNS('http://www.w3.org/2000/svg','image');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','height','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','width','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','id','testimg2');
svgimg.setAttributeNS('http://www.w3.org/1999/xlink','href','http://i.imgur.com/LQIsf.jpg');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','x','0');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','y','0');
svg.appendChild(svgimg);
document.querySelector('#testP2').appendChild(svg);
Like my title says, I'm trying to programmatically creating an SVG image element in a HTML page using javascript. For some reason my basic javascript code isn't working, however if I use the raphaeljs library it works fine. So there's obviously a problem with my js - I just can't seem to figure out what it is.
(note: the target browser is FF4+)
Here is the basic page with an html version of what I'm trying to achieve up the top:
<html>
<head>
<script type="text/javascript" src="http://raphaeljs.com/raphael.js"></script>
</head>
<body>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="test1"
height="200px"
width="200px">
<image
id="testimg1"
xlink:href="http://i.imgur.com/LQIsf.jpg"
width="100"
height="100"
x="0"
y="0"/>
</svg>
<hr />
<p id="testP1">
</p>
<hr />
<p id="testP2">
</p>
</body>
</html>
And here is my javascript:
var paper = Raphael(document.getElementById("testP1"), 200, 200);
paper.image("http://i.imgur.com/LQIsf.jpg", 0,0, 100, 100);
var svg = document.createElementNS('http://www.w3.org/2000/svg','svg');
svg.setAttributeNS('http://www.w3.org/2000/svg','xlink','http://www.w3.org/1999/xlink');
svg.setAttributeNS('http://www.w3.org/2000/svg','height','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','width','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','id','test2');
var svgimg = document.createElementNS('http://www.w3.org/2000/svg','image');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','height','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','width','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','id','testimg2');
svgimg.setAttributeNS('http://www.w3.org/1999/xlink','href','http://i.imgur.com/LQIsf.jpg');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','x','0');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','y','0');
svg.appendChild(svgimg);
document.querySelector('#testP2').appendChild(svg);
Live example: http://jsfiddle.net/Yansky/UVFBj/5/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SVG 原生属性(不包括
xlink:href
)不共享 SVG 命名空间;您可以仅使用setAttribute
而不是setAttributeNS
,或者使用example。
在这里,工作: http://jsfiddle.net/UVFBj/8/
请注意,我更改了你的小提琴以正确使用XHTML,因此 SVG 在所有主要浏览器中都可以很好地工作。
SVG native attributes (not including
xlink:href
) do not share the SVG namespace; you can either use justsetAttribute
instead ofsetAttributeNS
, or usefor example.
Here it is, working: http://jsfiddle.net/UVFBj/8/
Note that I changed your fiddle to properly use XHTML, so that SVG works nicely within it in all major browsers.
供进一步参考。
我一直在使用下面的函数来创建 SVG 元素,但无法创建图像,因为必须使用
setAtributeNS
创建 xlink:href。下面的代码已更正以执行此操作(动态创建任何 svg 元素)
示例用法:
parent
用于组织 svg groups 标签上的“图层”。For futher reference.
I've been using the function bellow to create SVG elements and it was failing to create images because of
xlink:href
must be created usingsetAtributeNS
.The code bellow is corrected to do that (create any svg element on the fly)
Sample usage:
The
parent
is used to organize 'layers' on svg groups tag.