我有一个kinecticjs图像对象我根据一些参数应用过滤器,但是当需要重新绘制它时会再次应用过滤器,这意味着它将复制过滤器。
我知道我应该做一些检查,但它将一个函数应用于数组。
//create object
var image = new Kinetic.Image({
image: alreadyLoadedImageObject
});
function addFilter(shouldAdd){
if(shouldAdd){
var filters = image.filters() || [];
filters.push(Kinetic.Filters.RGB);
image.filters(filters);
}
}
layer.add(image);
stage.add(layer);
addFilter(true);
stage.draw();
setTimeout(function(){
addFilter(true);
stage.draw();
},500);
这应该大致显示我目前在做什么,在这种情况下,一旦超时运行,将有2 Kinetic.Filters.RGB
应用于图像对象。
我认为这是一个普通的javascript问题而不仅仅是kineticjs,因为根本就是我需要以某种方式知道过滤器数组中已经存在Kinetic.Filters.RGB
函数。
所以有2个问题,无论如何要检查Array.indexOf
之类的数据中是否已存在函数名?或者KineticJS中是否已经存在某种预制方法,我还没有看到过?
答案 0 :(得分:3)
x = function(){};
y = function(){};
a = [];
a.push(x);
a.indexOf(x); //0
a.indexOf(y); //-1
所以你可以尝试:
if(filters.indexOf(Kinetic.Filters.RGB) !== -1)
答案 1 :(得分:0)
您还可以使用some()函数进行检查。
if(!filters.some((val) => {val == Kinetic.Filters.RGB}))