繁体   English   中英

动态加载svg,更改它并插入到文档中

[英]Dynamically load svg, change it and insert into document

我需要加载svg文件,更改它(旋转并更改某些路径的颜色),然后在没有任何外部库的情况下在网页上显示它,只需使用普通的JS。 我从MDN尝试过这段代码,但不知道如何访问SVG对象来操作SVG元素:

window.onload=run;

function run()
{

    loadSvg("/img/dgt.svg");

}

function loadSvg(url)
{
    var req=new XMLHttpRequest();
    req.onreadystatechange=function()
    {   if(req.readyState == 4)
        {   if(req.status == 200)
            {   var res=req.responseText;
                draw(res);
            }
            else
            {   console.log("URL "+url+" not available");
            }
        }
    }
    req.open("POST", url, true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.send();
}

function draw(svgData)
{
    var c=document.getElementById("ctr");
    var ctx=c.getContext("2d");
    var DOMURL=window.URL || window.webkitURL || window;
    var img=new Image();
    var svg=new Blob([svgData], {type: "image/svg+xml;charset=utf-8"});
    var url=DOMURL.createObjectURL(svg);

    img.onload=function()
        {
            ctx.drawImage(img, 0, 0);
            DOMURL.revokeObjectURL(url);
        }
    img.src=url;
}

那么,我想要实现的目标:1)将swg作为字符串加载并将其转换为SVG元素,或者只是将其加载为SVG元素2)进行一些更改,尤其是旋转和填充/颜色更改3)绘制网页上的SVG,无论是在画布上还是仅将其作为图像/ swg附加

如何做呢? 谢谢

这是一个AngularJS实现。 将所需的SVG路径元素存储为光栅文件(例如new-dgt.svg )。 例如:

{
    "home" : "s.o.m.e.p.a.t.h",
    "facebook" : "s.o.m.e.o.t.h.e.r.p.a.t.h"
}

创建一个指令/组件,比如svg-loader ,它将path参数作为属性,将从我们的光栅文件new-dgt.svg中搜索并返回路径并将其放入所需的模板中。 优选地,使服务对文件进行AJAX调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM