我的HTML5 Canvas代码可以转换为SVG吗?

Sam*_*tar 3 jquery html5 svg canvas html5-canvas

我有以下示例代码:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

如果我假设使用支持SVG和Canvas的浏览器,那么我如何将此代码转换为使用SVG.

使用SVG而不是Canvas会有什么优势或劣势?

Sir*_*rko 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">&#9744;</text>

</svg>
Run Code Online (Sandbox Code Playgroud)

使用SVG over canvas有两个优点:

  • 您的图像缩放得更好.如果放大图像,则会减少很多伪影.
  • 您可以使元素"可点击".将HTML中的相同事件附加到SVG中的任何元素.因此,您可以使用SVG制作某种自定义按钮,附加单击处理程序并将其用作提交按钮.