我有以下示例代码:
function drawCanvas() {
var canvas = document.getElementById("logoText");
var c = canvas.getContext('2d');
c.lineWidth = 1;
c.lineStyle = "#FFFFFF";
c.fillRect(10, 10, 150, 40);
c.fillStyle = "#FFFFFF";
c.font = "22px 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',sans-serif"
c.fillText("Test", 20, 45);
hexstring1 = "\u2610";
c.fillText(hexstring1, 20, 70);
}
如果我假设使用支持SVG和Canvas的浏览器,那么我如何将此代码转换为使用SVG。
使用SVG over Canvas会有什么优势或劣势?
答案 0 :(得分:8)
SVG是基于HTML的标签。因此,您必须在SVG
标记内插入DOM节点。您的示例大致转换为以下代码。
您可以像在任何其他节点一样在JavaScript中创建此项,但请确保使用document.createElementNS( 'http://www.w3.org/2000/svg', 'rect' );
插入节点而不是通常的document.createElement( 'div' );
。
<svg xmlns="http://www.w3.org/2000/svg"
version="1.1"
viewbox="0 0 100 100">
<rect x="10" y="10" width="150" height="40" style="stroke: #FFFFFF; stroke-width: 1px" />
<text x="20" y="45" style="fill: #FFFFFF; font-family: 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',sans-serif; font-size: 22px">Test</text>
<text x="20" y="70" style="fill: #FFFFFF; font-family: 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',sans-serif; font-size: 22px">☐</text>
</svg>
使用SVG over canvas有两个优点:
答案 1 :(得分:1)
您无法直接从canvas转换为svg。您可以将画布绘图命令存储在堆栈中,然后可以生成路径数据字符串,或使用DOM接口。查看路径数据结构的here