是否可以使用snap.svg加载部分svg文件?

时间:2017-01-17 07:47:37

标签: javascript svg snap.svg

我有svg

<svg><g id="g1">polygons here...</g><g id="g2">polygons here...</g></svg>

现在我正在使用snap.svg加载

<svg id="svg" width="1024"></svg>
    var s = Snap("#svg");
    s.attr({ viewBox: "0 0 1024 3250" });
    Snap.load("URLHERE", function(f){
        s.append(f);
    }) ;

是否可以只使用部分os文件并将其作为 f.select(“#g1”)而不仅仅附加那部分os文件?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。 我只是把f对象获取我需要的svg的一部分,然后像这样追加它:

var g = f.node.childNodes[4].querySelector("#HERE");

并在追加并且有效。

答案 1 :(得分:0)

查看Snap.load实施

Snap.load = function (url, callback, scope) {
    Snap.ajax(url, function (req) {
        var f = Snap.parse(req.responseText);
        scope ? callback.call(scope, f) : callback(f);
    });
};

使用ajax调用'加载'svg,并将加载部分委托给Snap.parse

您可以实现自己的版本,该版本解析xml并提取要由Snap.parse()解析的svg部分。

类似的东西:

myLoad = function (url, callback, scope, WHAT_TO_LOAD) {
    Snap.ajax(url, function (req) {
        var svgDataToParse = req.responseText;
        var result = "";
        // DO SOMETHING WITH svgDataToParse
        var f = Snap.parse(result);
        scope ? callback.call(scope, f) : callback(f);
    });
};