javascript - 以编程方式在 HTML5 SVG 中添加位图图像

标签 javascript html svg

我有一个使用 SVG 作为绘图 Canvas 的 Web 应用程序。画涂鸦和写文字作品。现在我希望能够将位图图像添加到 Canvas 上。这根本不起作用。

我正在尝试通过 <image> 将图像添加到 SVG标签。如果我编写的静态 HTML 可以像您期望的那样工作。但是,我仅使用 HTML 代码创建 SVG 文档,所有其他元素都是通过 JavaScript 动态创建的。虽然这适用于路径和文本元素,但它似乎不适用于图像。我想知道为什么。

我创建了一个 JSFiddle 来演示该问题:http://jsfiddle.net/cc4PH/1/ 。正如您在开发人员工具中看到的,静态情况和动态情况下的代码是相同的。但仅在静态情况下才会显示图像。这不是特定于浏览器的问题。我可以用 Chrome、Firefox、Safari 和 Opera 重现它。

我必须以某种方式告诉 SVG 加载图像吗?

提前致谢!

最佳答案

看起来问题出在 xlink:href 属性上。似乎需要使用 setAttributeNS() ,因为动态创建的图像不知道从 获取对 xlink 命名空间的引用svg 元素。修复如下:

var $img = $(document.createElementNS('http://www.w3.org/2000/svg', 'image')).attr({width: 200, height: 200});
$img.get(0).setAttributeNS('http://www.w3.org/1999/xlink', 'href', url);

http://jsfiddle.net/cc4PH/6/

有趣的是,这也意味着如果链接的图像将在创建 svg 元素时不需要 xmlns:xlink 属性只能动态添加,如下所示:http://jsfiddle.net/cc4PH/8/

关于javascript - 以编程方式在 HTML5 SVG 中添加位图图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17887982/

相关文章:

javascript - 如何在 Next.js 中实现 React hook Socketio

html - SCSS 图像路径不起作用

javascript - D3.js enter() 破坏了 svg 形状动画,但更新并删除它们很好

javascript - 如何使用 Jasmine 测试 Knockout.js 点击绑定(bind)

javascript - 使用任何动画更改 SPAN 类

javascript - 如何让hammerjs事件只触发一次?

html - 使一段文本出现,另一段在相同的延迟下消失

php - 如果在选择标签html php中选择了男性/女性,如何仅输出男性/女性学生

javascript - 简单的条形进度指示器静态或动画

javascript - 如何剪掉 viewBox 之外的内容?