Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态加载svg,更改它并插入到文档中_Javascript_Svg - Fatal编程技术网

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

Javascript 动态加载svg,更改它并插入到文档中,javascript,svg,Javascript,Svg,我需要加载svg文件,更改它(旋转并更改某些路径的颜色),然后在网页上显示它,而不需要任何外部库,只需使用纯JS即可。我尝试了MDN中的这段代码,但不知道如何访问SVG对象来操作SVG元素: window.onload=run; function run() { loadSvg("/img/dgt.svg"); } function loadSvg(url) { var req=new XMLHttpRequest(); req.onreadystatechang

我需要加载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,可以在画布上绘制,也可以将其附加为image/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,它将路径参数作为属性,将搜索并返回光栅文件新的dgt.svg中的路径,并将其放入所需的模板中。最好使用make service对文件进行AJAX调用。

这里是一个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,它将路径参数作为属性,将搜索并返回光栅文件新的dgt.svg中的路径,并将其放入所需的模板中。最好是使用服务对文件进行AJAX调用。

谢谢,但是不需要任何库,只需使用普通JS即可。谢谢,但是不需要任何库,只需使用普通JS即可。失败的原因是什么?你的调试器揭示了什么?什么都没有。它只是不画任何没有任何错误的东西。我现在试着做一把小提琴单步调试器不能显示任何东西。有人打电话吗?onreadystatechange函数是否被调用等。只需再次检查它,现在它就可以工作了!但我发誓,一个小时前就没有了!)所以,这是我的错。我不知道这是怎么发生的。无论如何,既然它是一个图像,我如何在其中更改svg?我想应该是一个svg元素吧?我不知道该怎么做。。。我可以将其作为图像旋转,但是,由于它不在DOM中,因此我无法访问SVG元素,例如通过getElementById()?也许您应该删除此问题并提出一个新问题。它以何种方式失败?你的调试器揭示了什么?什么都没有。它只是不画任何没有任何错误的东西。我现在试着做一把小提琴单步调试器不能显示任何东西。有人打电话吗?onreadystatechange函数是否被调用等。只需再次检查它,现在它就可以工作了!但我发誓,一个小时前就没有了!)所以,这是我的错。我不知道这是怎么发生的。无论如何,既然它是一个图像,我如何在其中更改svg?我想应该是一个svg元素吧?我不知道该怎么做。。。我可以将它作为图像旋转,但是,因为它不在DOM中,所以我无法访问SVG元素,例如通过getElementById()?也许您应该删除这个问题并问一个新问题。