2013-11-20 8 views
19

Chcę programowo wybrać obiekt Fabrics.js. Co mam do zrobienia? Na przykład, dodaję dwa obiekty tak:Jak programowo zaznaczyć obiekt 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 
    })); 

i mam dwa przycisku podczas klikania przycisku o nazwie

  1. wybierz prostokąt
  2. wybrać drugi obiekt

podczas klikania przycisk wyboru prostokąta powinien wybrać kształt prostokąta i podczas klikania przycisku wyboru drugiego obiektu powinien wybrać drugi krąg obiektów.

Oto Jsfiddle, aby obejść ten problem.

Ja się przeżułam i mam dość, tutaj szukam jakiegoś punktu, od czego zacząć.

EDIT

lubię mieć identyfikator dla każdego obiektu, powinno być możliwe, aby wybrać obiekt za pomocą tego identyfikatora, dlaczego pytam jest to, podczas gdy przy użyciu wspólnych rzeczy nie możemy powiedzieć z pewnością wszystkie podłączone węzły będą miały element w tym samym indeksie, więc unikalny identyfikator będzie przydatny.

+1

@kangax prosze o pomoc w tym –

Odpowiedz

17

Tak, można ustawić identyfikator dla każdego elementu dodając poniższy kod w all.js

w fabric.js budować wersji 1.3.0: W deklaracja obiektu dodać

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

teraz można ustawić identyfikator obiektu z:

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

można pobrać identyfikator obiektu z:

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

dziękuję, jestem teraz w stanie dodać id +1, czy możesz mi powiedzieć, czy jest możliwe, aby wybrać obiekt używający tego identyfikatora? jeśli tak, proszę podać przykład: –

+0

W każdym przypadku musisz przemierzyć wszystkie obiekty i sprawdzić, czy identyfikator bieżącego obiektu == id obiektu, którego potrzebujesz! Prosto .. Jeśli tak, zrób trochę akcji .. – John

+0

ya Myślę o tym pierwszy, ale czuję, że to nie jest dobry sposób, jeśli mamy ogromną liczbę obiektów to jest? –

59

chcesz użyć:

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

W przycisków zdarzenia Click

liczba odpowiada kolejności, w której przedmiot został dodany do płótna.

Zobacz tutaj:

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

+2

Nice! nie możemy uzyskać numeru pozycji onclick, a następnie przekazujemy to do 'canvas.setActiveObject (canvas.item (itemNumber));' – softvar

+1

Czy istnieje sposób na wybranie numeru przedmiotu (onclick)? – softvar

+0

@debbrown jest jakikolwiek sposób na ustawienie identyfikatora dla elementu, ponieważ podoba mi się to w tej współpracy .... więc jeśli wybieranie pozycji według pozycji byłoby inne w każdej z osób, więc jeśli możemy dodać jakiś unikalny identyfikator i pobrać go byłby jakiś dobry. +1 dla twojej wartościowej sugestii –

3

znaleźć numer obiekt tkanina (Numer artykułu) wybranego użytkowania obiektu:

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

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

var id jest taka sama liczba, jeśli programowo ustawiłeś obiekt jak w odpowiedzi Dana Browna:

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