現在我還沒有使用FabricJS(等待已經投票的垃圾郵件),看看源碼有一個getObjects()
方法。它所做的是返回一個對象數組,而不是像forEachObject()
這樣的自定義迭代器。
因此,你可以使用所有正常的數組迭代方法,如forEach()
,some()
,every()
等,這將允許你做你想做的事情。
所以我的理解是你想檢查對象是否是圖像,如果它的背景屬性爲true,並在第一次出現時中止循環?這應該做到這一點。
canvas
.getObjects()
.some(obj => {
if (obj.isType('image') && obj.hasOwnProperty('background') && obj.background === true) {
console.log('Aww shucks, you found me.');
return true;
}
});
顯然這是僞代碼。 本質上它會循環所有對象並中止如果你返回true
。如果任何元素確實返回true
,則some
的返回值也將是true
。
編輯後MichałDopieralski評論。
我忽略了事實getObjects
可以傳遞一個類型,並會爲您篩選結果。所以用這些東西變得更簡單。
canvas
.getObjects('image')
.some(obj => {
if (obj.background === true) {
console.log('Aww shucks, you found me.');
return true;
}
});
array some docs
fabricjs getObjects source
編輯: 在一個側面說明了hasOwnProperty
檢查不應該要求我不認爲。只要定義了obj
,那麼訪問它不存在的屬性將返回undefined
。其中=== true
檢查失敗。
你可以在它裏面有一個'flag'。但是如果你想終止一個循環,請使用'for-loop ... break;' – Rayon
你試過'continue n;'嗎? – Phil795
可能''forEachObject'不是爲了在每個對象對'function(obj)'執行之前終止循環而設計的。你可能要考慮使用正常的for循環。 – Ian