Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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 FabricJS getCircle(按Id或名称)_Javascript_Frontend_Fabricjs - Fatal编程技术网

Javascript FabricJS getCircle(按Id或名称)

Javascript FabricJS getCircle(按Id或名称),javascript,frontend,fabricjs,Javascript,Frontend,Fabricjs,我正在创建多个圆形对象,每个对象都有一个唯一的名称(或id)。 当我想要选择一个对象时,我必须搜索所有圆形对象并返回正确的对象。对于许多对象,我想这对性能不好。有没有办法通过唯一属性选择对象 我创建了一个简单的JSFIDLE,以显示获取圆形对象的当前解决方案: 我将每个对象与属性进行比较,如果其中一个匹配,则返回该对象。也许你能帮我找到一个更简单的解决办法 以下是迄今为止获取对象的代码: function getPoint(name) { var line_point_array =

我正在创建多个圆形对象,每个对象都有一个唯一的名称(或id)。 当我想要选择一个对象时,我必须搜索所有圆形对象并返回正确的对象。对于许多对象,我想这对性能不好。有没有办法通过唯一属性选择对象

我创建了一个简单的JSFIDLE,以显示获取圆形对象的当前解决方案:

我将每个对象与属性进行比较,如果其中一个匹配,则返回该对象。也许你能帮我找到一个更简单的解决办法

以下是迄今为止获取对象的代码:

function getPoint(name) 
{
    var line_point_array = canvas.getObjects('circle');

    for (var i = 0; i < line_point_array.length; i++) {
        var point = line_point_array[i];

        if (point.name == name) {
            return point;
        }
    }
}
函数getPoint(名称)
{
var line_point_array=canvas.getObjects('circle');
对于(变量i=0;i

谢谢:)

你可以试试类似()的东西:


谢谢你的回答。我认为这对我来说是一个更好的解决办法:)不客气。当然,这只适用于圆形,因为我在构造函数中硬编码了
newfabric.Circle
。我想可以修改它,使任何使用方括号的构造函数都能访问
fabric
对象的方法,就像在
newfabric[“Ellips”]()
中一样,其中“Ellips”将从添加到
FabricCanvasObject
构造函数的新参数中传递过来..我不是
fabric.js
方面的专家,但也许你想调查一下,如果你能解决你的问题。可能会提供一个更干净的解决方案。我会看看它,只是在我的项目中修复一些其他东西,但我希望它能帮助我提高性能。:)谢谢!
var FabricCanvasObject = function(canvasId, attrSet) {
    this.theCanvas = new fabric.Canvas(canvasId, attrSet);
    this.addShape = function(shapeAttrSet) {
        var newShape = this.theCanvas.add(new fabric.Circle(shapeAttrSet));
        this.canvasElements.length += 1;
        this.canvasElements[shapeAttrSet.name + this.canvasElements.length] = newShape;
    };
    this.canvasElements = { length: 0 };
};
var myFabric = new FabricCanvasObject('c', {
    targetFindTolerance: 15
});
console.log(myFabric);
myFabric.addShape({
    radius: 20,
    fill: 'green',
    left: 100,
    top: 100,
    name: 'circle',
    id: 1
});
myFabric.addShape({
    radius: 20,
    fill: 'red',
    left: 150,
    top: 150,
    name: 'circle',
    id: 2
});
myFabric.addShape({
    radius: 20,
    fill: 'blue',
    left: 200,
    top: 200,
    name: 'circle',
    id: 3
});
console.log(myFabric.canvasElements);
console.log(myFabric.canvasElements.circle1);