【发布时间】:2018-06-01 18:09:55
【问题描述】:
我在 svg 中使用画布时遇到问题,使用 foreignObject。
问题是画布被插入到一个组中,该组具有变换(平移或旋转或缩放),但画布没有打印变换。
我在 Chrome 上。
你可以在那里看到我的例子:
https://jsfiddle.net/Surre/qjrvxgos/
<body>
<svg width="400px" height="300px" viewBox="0 0 400 300"
xmlns="http://www.w3.org2000/svg">
<g transform='translate(250,10)rotate(40)'>
<foreignObject height="700" width="370" y="0" x="0">
<span xmlns="http://www.w3.org/1999/xhtml">
<canvas id="canvas" width="400px" height="300px" fill-style="#FF0000"></canvas>
<div>Comment</div>
</span>
</foreignObject>
</g>
</svg>
</body>
“评论”有很好的转换,但画布没有。 但是,如果您使用开发工具并检查元素画布,您会发现他在转换中处于有利位置。
希望你能帮助我。
谢谢
【问题讨论】:
-
抱歉,我更正了
-
大概是一个 Chrome 错误,为什么不向他们的 bugtracker 报告呢?
-
问题:为什么要在 SVG 中使用画布元素?这看起来像 HTML5 页面中使用的 SVG,所以这里应该做一些事情: 1) svg 是 HTML5 的一部分,正式地,所以没有 XML 命名空间。 2) 所有其他元素都相同:没有命名空间。 3) 为什么不把画布放在页面本身而不是 SVG 内部?你在这里具体想做什么,因为这只是一个网页,看起来你正在使用 SVG 来做 CSS 已经可以做的事情。
-
@Mike'Pomax'Kamermans 只有 SVGRoot 节点在 html 命名空间中,它的所有子节点都在 svg 中。包含在不属于 svg 命名空间的 foreignObject 中的元素需要声明自己的命名空间,至少在所有第一个父节点上。但是 svg root 的 xmlns 声明有错字,这会导致 chrome 的错误行为吗?我会对此感到惊讶,但如果设置,OP 应该正确设置它。
-
不,你没有抓住重点。 SVG 是 HTML5,HTML5 中没有“命名空间”,
<svg>元素是像<p>或<div>这样的一等公民,并且 not 需要命名空间,您只需像使用任何其他 HTML 元素一样使用它。这也意味着您不会为<span>之类的东西“转义” SVG 命名空间。 all 只是 HTML 元素。
标签: javascript html canvas svg transformation