2013-01-21 42 views
1

我想要创建一个使用KineticJs绘图画布,这里的一对的jsfiddle代码: http://jsfiddle.net/thekucays/k7ZMc/2/创建画布添加事件,形状[KineticJs]

上面我的代码

,我试图创建一个矩形和事件监听器添加到每一个矩形我创建..(115线)

var item = layer.get('.rect1'); 
item.on('click', function(){ 
    item.setFill('RED'); 
}); 

但是当我执行它,如果我点击画布上的任何矩形,在矩形最后事件触发我创建。 。 上面的代码有什么问题?

最好的问候, 卢基[R Rompis

+0

你的jsfiddle不起作用,因为你没有对kinetic.js和kode.js的引用 – SoluableNonagon

回答

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 
0

hy :) umm..yeah在我的代码中,我之所以使用rect_counter的原因是,我想追踪最后一个矩形,我绘制..所以我不需要从第一个矩形的循环开始绑定事件..

现在我已经改变(在鼠标松开事件)为:

var rects = stage.get('.rect'+rect_counter); 
rects.on('click', function(){ 
    this.setAttrs({ 
     fill: 'red' 
    }); 
    //layer.draw(); 
}); 

现在works..and到目前为止good..thanks您的帮助:)

最好问候,

Luki R Rompis