【发布时间】:2023-03-05 00:40:01
【问题描述】:
我知道我可以将 svg 文件设置为 HTML img 元素的 src,如下所示:
<img src="mySVG.svg"/>
但我能否以某种方式将动态 SVG 元素设置为 src 的 img?
<svg id="mySVGElement">
...
</svg>
<img src="?"/>
【问题讨论】:
我知道我可以将 svg 文件设置为 HTML img 元素的 src,如下所示:
<img src="mySVG.svg"/>
但我能否以某种方式将动态 SVG 元素设置为 src 的 img?
<svg id="mySVGElement">
...
</svg>
<img src="?"/>
【问题讨论】:
你可以用 JavaScript 做到这一点:
var svg = document.querySelector('svg'),
img = document.querySelector('img');
setImageToSVG(img,svg);
function setImageToSVG(img,svg){
var xml = (new XMLSerializer).serializeToString(svg);
img.src = "data:image/svg+xml;charset=utf-8,"+xml;
}
如果您的 SVG 元素是动态的(变化的),那么每次 SVG 元素发生变化时,您都需要重新运行此代码。
或者,这是一个演示 @Robert 的答案,使用另一个 <svg> 元素来引用第一个实时:
<svg id="src" xmlns="http://www.w3.org/2000/svg" …>
<!-- Your SVG here -->
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:x="http://www.w3.org/1999/xlink" …>
<use x:href="#src" x="80" y="30" width="100" height="100" />
</svg>
该演示还显示您可以调整引用的 SVG 文档的大小或以其他方式转换引用的 SVG 文档,并且引用是实时的:对原始文件的更改会立即反映在 <use> 中。
【讨论】:
这更新了 Phrogz 接受的答案(8 年后!)
该示例无法在 Chrome 或 Firefox 上运行(图像显示已损坏) 改为
img.src = "data:image/svg+xml;base64,"+btoa(xml);
我不确定原版停止工作的原因,但这可能有助于有人登陆这里。
【讨论】: