这个问题属于fabricJS和canvas。在下面的案例中,检查是否存在任何属性为true的对象(obj.background == true
)。画布上可以有几个图像。在第一个对象检测之后,我想终止循环。我是怎么做到的我曾使用return false;
但不起作用。这是功能。
canvas.forEachObject(function(obj){
if(obj.isType('image') && obj.hasOwnProperty('background')){
if(!obj.background == true){
alert("true");
return false;
}
}
});
答案 0 :(得分:6)
现在我还没有使用FabricJS(等待已经下来投票的垃圾邮件),查看来源有一个getObjects()
方法。这样做是返回一个对象数组而不是像forEachObject()
这样的自定义迭代器。
因此,您可以使用所有常规数组迭代方法,例如forEach()
,some()
,every()
等,这样您就可以按照自己的意愿行事。
所以我的理解是你要检查对象是否是一个图像,如果它的background属性为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;
}
});
编辑:
另一方面,我不认为hasOwnProperty
检查不需要。只要定义了obj
,那么访问不存在的属性将返回undefined
。这将导致=== true
检查失败。