2013-11-20 39 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.