Jetzt habe ich nicht verwendet FabricJS (Erwartung einer Spam von Down-Stimmen bereits) an der Quelle suchen eine ist getObjects()
Methode. Dadurch wird ein Array von Objekten anstelle eines benutzerdefinierten Iterators wie zurückgegeben.
damit So könnte man die normalen Array itteration Methoden wie forEach()
, some()
, every()
usw. benutzen, die Ihnen erlaubt, zu tun, was Sie wollen.
Also mein Verständnis willst du überprüfen, ob das Objekt ein Bild ist und ob seine Hintergrund-Eigenschaft wahr ist, und die Schleife beim ersten Auftreten abbrechen? Dies sollte es tun.
canvas
.getObjects()
.some(obj => {
if (obj.isType('image') && obj.hasOwnProperty('background') && obj.background === true) {
console.log('Aww shucks, you found me.');
return true;
}
});
Offensichtlich ist dies Pseudocode. Im Wesentlichen wird es alle Objekte Schleife und Abbrechen, wenn Ihre Rückkehr true
. Wenn irgendein Element true
zurückgibt, wird der Rückgabewert von some
auch true
sein.
EDIT nach Michał Dopiralski Kommentar.
Ich habe die Tatsache übersehen getObjects
kann einen Typ übergeben werden und wird die Ergebnisse für Sie filtern. So werden die Dinge noch einfacher.
canvas
.getObjects('image')
.some(obj => {
if (obj.background === true) {
console.log('Aww shucks, you found me.');
return true;
}
});
array some docs
fabricjs getObjects source
EDIT: Auf einer Seite zur Kenntnis der hasOwnProperty
Check ist nicht notwendig werden sollte, ich glaube nicht. Solange obj
definiert ist, gibt der Zugriff auf eine Eigenschaft, die nicht existiert, undefined
zurück. Welches wird die === true
Überprüfung fehlschlagen.
Sie können eine 'flag' darin haben .. Aber wenn Sie eine Schleife beenden möchten, gehen Sie mit dem' for-loop ... break; ' – Rayon
Haben Sie versucht' continue n; '? – Phil795
Wahrscheinlich ist 'forEachObject' nicht dazu gedacht, die Schleife zu beenden, bevor jedes Objekt gegen die' function (obj) 'ausgeführt wird. Sie sollten in Betracht ziehen, normale For-Schleife zu verwenden. – Ian