javascript - FabricJS - 传递附加数据或从 Fabric.loadSVGFromString 获取 id

标签 javascript svg fabricjs

我有一个要渲染的对象数组。我想将附加数据传递给 SVG 解析器,这样我就可以在悬停时显示标题等。 - 一般情况下识别 svg 对象。我的代码:

for ( var i = 0; i < response.data.items.length; i++) {

    var currItem = response.data.items[i];      
    fabric.loadSVGFromString(currItem.content, function(objects, options) {
        var obj = fabric.util.groupSVGElements(objects, options);
        obj.tooltip = currItem.tooltip;
        canvas.add(obj);
        canvas.moveTo(obj, 3);
        canvas.calcOffset();
        canvas.renderAll();
    });

}

由于 loadSVGFromString 是异步的(我认为),currItem 中的数据变化速度更快,导致工具提示值无效。

我需要一个解决方案,以便我可以识别创建的对象并以任何方式将其与数据链接(从 svgObject 获取 id 或将数据传递给解析器)

任何帮助将不胜感激!

最佳答案

请尝试一下 enlivenObjects() 函数,就像这样(来 self 的网络应用程序的片段),这里我从数据库获取我的对象(svg 和自定义对象),并将它们添加一个 Canvas 上的一张:

 result.data.forEach(function (object) {
                                var tmpObject = JSON.parse(object.table_data);
                                console.log("obj id:",tmpObject.objectId);
                                fabric.util.enlivenObjects([tmpObject], function (objects) {
                                    var origRenderOnAddRemove = canvas.renderOnAddRemove;
                                    canvas.renderOnAddRemove = false;
                                    console.log(objects);
                                    objects.forEach(function (o) {
                                        //custom objects & svgobjects go to background
                                        if (o.typeTable == 'svgObject' || o.typeTable == 'customText' || o.typeTable == 'customRect' || o.typeTable == 'customCircle' || o.typeTable == 'customPolygon' || o.typeTable == 'customLine') {
                                            canvas.add(o);
                                            canvas.sendToBack(o);//send svg στο background
                                        } else {
                                            canvas.add(o);
                                        }
                                        //console.log(o);
                                    });

                                    canvas.renderOnAddRemove = origRenderOnAddRemove;
                                    canvas.renderAll();
                                });
                            });

关于javascript - FabricJS - 传递附加数据或从 Fabric.loadSVGFromString 获取 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39916943/

相关文章:

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

javascript - 我的代码有什么问题吗?(使用javascript更改图片)

javascript - 否则 rgba 不能在 javascript 中工作

javascript - 在浏览器窗口中打开新选项卡(使用 window.open 打开)

javascript - 隐藏 SVG 元素需要很多时间

javascript - 通过选项选择更新 SVG

ios - 如何在 IOS 中为 SVG 路径设置动画?

javascript - 厄运的碰撞循环

canvas - 在 Fabric.js 中重置 Canvas 并使用 JSON 重新加载

javascript - primeNg 数据表中的复选框绑定(bind)对象