2013-11-20 35 views
19

我想以编程方式选择Fabrics.js对象。我需要做什么?例如,我加入了两个对象是这样的:如何以编程方式选择Fabric.js对象

var canvas = new fabric.Canvas('canvas'); 
canvas.add(new fabric.Rect({ 
    left: 100, 
    top: 100, 
    width: 75, 
    height: 50, 
    fill: 'green', 
    stroke: 'black', 
    strokeWidth: 3, 
    padding: 10 
    })); 

canvas.add(new fabric.Circle({ 
    left: 200, 
    top: 200, 
    radius: 30, 
    fill: 'gray', 
    stroke: 'black', 
    strokeWidth: 3 
    })); 

和我有两个按钮,点击指定的按钮

  1. 选择矩形
  2. 选择第二个对象

同时点击选择矩形按钮时,应选择矩形形状,同时单击选择第二个对象按钮时,应选择第二个对象圆。

这是用于解决方法的Jsfiddle

我瞪着眼睛,厌倦了,这里我正在寻找一些关于如何开始的一点。

编辑

我喜欢有每个对象的ID,应该可以使用该ID,为什么我问这是选择对象,同时采用协同的事情,我们不能告诉当然,所有连接的节点都将具有相同索引中的项目,因此唯一的ID将很有用。

+1

@kangax请在此帮助 –

回答

17

是的,你可以为每个项目由all.js

在fabric.js添加下面的代码设定ID建立1.3.0版本:在对象声明添加

var object = { 
    id: this.id, 
    remaining properties in all.js 
    } 

现在你可以设置对象ID:

canvas.getActiveObject().id=your id value; 

可以检索与对象ID:

Myid= canvas.getActiveObject().get('id'); 
+0

感谢,现在我可以将ID添加+1,你能告诉我是可以选择使用该ID的对象?如果是的话请给我的例子为 –

+0

你必须遍历所有的对象和检查任何情况下,如果当前对象ID = =你所需要的对象的ID!简单..如果是做一些行动.. – John

+0

雅我首先想到的,但我觉得这不是一个好方法,如果我们有大量的对象是吗? –

59

你想使用:

canvas.setActiveObject(canvas.item(0)); 

中的按钮单击事件

数目对应于该对象被添加到画布上的顺序。

在这里看到:

http://jsfiddle.net/ThzXM/1/

+2

不错!我们不能获得物品编号onclick,然后将其传递给'canvas.setActiveObject(canvas.item(itemNumber));' – softvar

+1

有没有办法让物品编号被选中(onclick)? – softvar

+0

@danbrown有没有什么办法来设置ID为项目,因为我喜欢做这一合作....所以,如果你选择的项目位置,它会在每个人的不同,所以如果我们可以添加一些独特的ID和获取它会是一些好的。 +1为您的宝贵建议 –

3

要找到布对象号(项目编号),所选对象使用的:

canvas.on({ 
    'object:selected': selectedObject 
}); 

function selectedObject(e) { 
    var id = canvas.getObjects().indexOf(e.target); 
} 

VAR id是相同的号码,如果您以编程方式设置对象,如Dan Brown的回复:

canvas.setActiveObject(canvas.item(id)); //id = 0, 1, 2 etc.