我正在尝试使用KineticJs创建绘图画布,这里是jsfiddle上的代码: http://jsfiddle.net/thekucays/k7ZMc/2/
在上面的代码中,我正在尝试创建一个rect,并为我创建的每个rect添加一个事件监听器..(第115行)
var item = layer.get('.rect1');
item.on('click', function(){
item.setFill('RED');
});
但是当我执行它时,如果我在画布上单击任何rect,则事件会在我创建的最后一个rect上触发。 我上面的代码出了什么问题?
最好的问候, Luki R Rompis
答案 0 :(得分:0)
var item = layer.get('.rect1'+rect_counter); //dont user "+rec_counter" as this is what binds it to the LAST element
item.on('click', function(){
item.setFill('RED');
});
尝试一个更基本的解决方法:--------这个最适合我-----------
var itemsList = layer.getChildren(); //gets all shapes in this layer
for(var i=0; i<itemsList.length; i++){
if(itemsList.getName == 'rect1'){ //since you named your rectangles 'rect1' check name
itemsList[i].on('click', function(){
item.setFill('RED');
});
}
};
或只是尝试使用:
var item = layer.get('.rect'); //all rectangles, without number
item.on('click', function(e){ // I think you need an 'e' here
item.setFill('RED');
});
// I doubt this will work as ALL your rectangles need to have the same name if you want to .get() them all
答案 1 :(得分:0)
hy :) 嗯..我的代码,我使用rect_counter的原因是我想跟踪我绘制的最后一个矩形..所以我不需要从第一个矩形开始循环来绑定事件..
现在我已经(在mouseup事件上)更改为:
var rects = stage.get('.rect'+rect_counter);
rects.on('click', function(){
this.setAttrs({
fill: 'red'
});
//layer.draw();
});
现在它可以工作..到目前为止很好......感谢您的帮助:)。
最好的问候,
Luki R Rompis