Подтвердить что ты не робот

Как программно выбрать объект Fabric.js

Я хочу программно выбрать объект Fabrics.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
  }));

и у меня есть две кнопки при нажатии кнопки с именем

  • выберите прямоугольник
  • выберите второй объект

При нажатии кнопки выбора прямоугольника необходимо выбрать форму прямоугольника, и при нажатии кнопки выбора второго объекта он должен выбрать второй круг объектов.

Ниже приведено Jsfiddle.

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

EDIT

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

4b9b3361

Ответ 1

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

В build.js build версии 1.3.0: в объявлении объекта добавьте

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

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

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

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

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

Ответ 2

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

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

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

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

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

http://jsfiddle.net/ThzXM/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.

Ответ 4

добавить идентификатор для ваших объектов.

var canvas = new fabric.Canvas('canvas');

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

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

function removeSpot(canvas, id) {
    canvas.forEachObject(function(obj) {
        if (obj.id && obj.id === id) canvas.remove(obj);
    });
}

// remove rect
removeSpot(canvas, 123);

// remove circle
removeSpot(canvas, 456);