Javascript 从SVG加载的Fabric JS形状的位置不正确

Javascript 从SVG加载的Fabric JS形状的位置不正确,javascript,fabricjs,Javascript,Fabricjs,我正在尝试将svg添加到画布并对其进行缩放。最后,我需要获得单个对象。所以我用这种可怕的方法来解决解组问题。但在这种情况下,立场是不正确的。谁能告诉我一条路径的绝对位置(左边和上面) var canvas=newfabric.canvas('c'); var-str=''; var-svg; fabric.loadSVGFromString(str,函数(对象,选项){ svg=fabric.util.groupSVGElements(对象、选项); svg.scaleToHeight(can

我正在尝试将svg添加到画布并对其进行缩放。最后,我需要获得单个对象。所以我用这种可怕的方法来解决解组问题。但在这种情况下,立场是不正确的。谁能告诉我一条路径的绝对位置(左边和上面)

var canvas=newfabric.canvas('c');
var-str='';
var-svg;
fabric.loadSVGFromString(str,函数(对象,选项){
svg=fabric.util.groupSVGElements(对象、选项);
svg.scaleToHeight(canvas.height);
canvas.add(svg);
svg.center();
canvas.renderAll();
svg.setCoords();
var bounds=svg.getObjects();
console.log(界限[1]);
边界[1].group.setFill('#00000');
console.log((边界[1].getLeft()+边界[1].group.getLeft());
console.log(边界[1].getTop()+边界[1].group.getTop());
风险值项目;
loadSVGFromString(str,函数(对象,选项){
var group=newfabric.group(对象、选项);
canvas.add(组);
group.scaleToHeight(canvas.getHeight());
group.center();
canvas.renderAll();
项目=组。\u对象;
组。_restoreObjectsState();
画布。移除(组);
canvas.renderAll();
对于(var i=0;i

我回答我的问题是因为有人可能会觉得它有用。我就是这样做的

1.使用fabric.util.groupSVGElements加载svg和组,因为它提供了最正确的位置

2.将svg对象添加到单独的组中,以便我可以再次解组对象

3.最后,将未分组的对象位置设置为svg路径对象位置(我知道这很愚蠢,但没有其他解决方案)

var canvas=newfabric.canvas('c');
var-str='';
var-svg;
fabric.loadSVGFromString(str,函数(对象,选项){
svg=fabric.util.groupSVGElements(对象、选项);
svg.scaleToHeight(canvas.height);
canvas.add(svg);
svg.center();
canvas.renderAll();
svg.setCoords();
var bounds=svg.getObjects();
console.log(界限[1]);
边界[0].group.setFill('#00000');
loadSVGFromString(str,函数(对象,选项){
var group=newfabric.group(对象、选项);
canvas.add(组);
group.scaleToHeight(canvas.getHeight());
canvas.renderAll();
变量项=组。\u对象;
组。_restoreObjectsState();
画布。移除(组);
对于(var i=0;i

尝试模拟对象移动,不要设置另一个顶部和左侧值, 对我来说就是这样

        fabric.loadSVGFromURL(url, function (objects, options) {
        canvas.add.apply(canvas, objects);
    }, function (item, object) {
        object.set('top', object.top + 400);
        object.set('left', object.left + 300);
    });

您需要调用loadSVGFromURL,但不必执行其他操作两次。正确的代码(typescript)应为:

      fabric.loadSVGFromURL(url,
        (objects, options) => {
            const svg = fabric.fabric.util.groupSVGElements(objects, options);
            // canvas scale to svg
            canvas.setWidth(svg.width);
            canvas.setHeight(svg.height);
            //or svg scale to canvas
            //svg.scaleToHeight(canvas.height);

            //Glitch, need to do this twice to make things right
            fabric.loadSVGFromURL(url,
                (objects, options) => {
                    var group = new fabric.Group(objects, options);
                    group.scaleToHeight(canvas.getHeight());
                    var items = group._objects;
                    group._restoreObjectsState();
            
                    for (let i = 0; i < items.length; i++) {
                        canvas.add(items[i]);
                    }
                    
                    canvas.renderAll();
                });

        });
fabric.loadSVGFromURL(url,
(对象、选项)=>{
const svg=fabric.fabric.util.groupSVGElements(对象、选项);
//画布缩放到svg
canvas.setWidth(svg.width);
canvas.setHeight(svg.height);
//或svg缩放到画布
//svg.scaleToHeight(canvas.height);
//Glitch,需要做两次才能把事情做好
fabric.loadSVGFromURL(url,
(对象、选项)=>{
var group=newfabric.group(对象、选项);
group.scaleToHeight(canvas.getHeight());
变量项=组。\u对象;
组。_restoreObjectsState();
for(设i=0;i