2013-11-20 1 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 для обходного пути.

Я очнулся и накормил, здесь я ищу какой-то момент, как начать.

EDIT

Я хотел бы иметь идентификатор для каждого объекта, это должно быть возможным, чтобы выбрать объект, используя этот идентификатор, поэтому я прошу это, в то время как с помощью совместных вещей, которые мы не можем сказать, конечно, все подключенные узлы будут иметь элемент в одном и том же индексе, поэтому будет полезен уникальный идентификатор.

+1

@kangax, пожалуйста, помогите в этом –

ответ

17

Да, вы можете установить идентификатор для каждого элемента, добавив следующий код в all.js

г. В fabric.js билда 1.3.0: В декларация объекта добавить

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

Теперь вы можете установить идентификатор объекта с:

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

Вы можете получить идентификатор объекта с:

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

спасибо, теперь я могу добавить id +1, можете ли вы сказать мне, можно ли выбрать объект, использующий этот идентификатор? если да, пожалуйста, дайте мне пример для этого –

+0

В любом случае вам нужно пройти все объекты и проверить, является ли текущий идентификатор объекта == идентификатором требуемого объекта! Просто .. если да, сделайте какое-нибудь действие .. – John

+0

ya Я думаю об этом в первую очередь, но я чувствую, что это не очень хороший способ, если у нас есть огромное количество объектов? –

59

Вы хотите использовать:

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

В кнопках мыши событие

номер соответствует порядку, в котором объект был добавлен в холст.

Смотрите здесь:

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

+2

Ницца! мы не можем получить номер элемента onclick, а затем передать это 'canvas.setActiveObject (canvas.item (itemNumber));' – softvar

+1

Есть ли способ получить выбранный номер товара (onclick)? – softvar

+0

@ danbrown есть ли способ установить идентификатор для элемента, потому что мне нравится, что он делает это совместное ... так что если вы выбираете по позиции позиции, это будет отличаться для каждого человека, поэтому, если мы сможем добавить уникальный идентификатор и получить его было бы хорошим. +1 для вашего ценного предложения –

3

Чтобы найти номер объекта ткани (номер элемента) из выбранного объекта:

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

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

вар id одно и то же число, если вы программно задали объект, как в ответе Дэна Брауна:

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