Javascript 通过向形状添加事件创建画布[KineticJs]

Javascript 通过向形状添加事件创建画布[KineticJs],javascript,html5-canvas,kineticjs,Javascript,Html5 Canvas,Kineticjs,我正在尝试使用KineticJs创建一个绘图画布,下面是JSFIDLE上的代码: 在上面的代码中,我试图创建一个rect,并为我创建的每个rect添加一个事件侦听器。。(第115行) 但是当我执行它时,如果我单击画布上的任何一个rect,事件将在我创建的最后一个rect上触发。。 我上面的代码有什么问题 致以最良好的祝愿, Luki R Rompis您正在使用: var item = layer.get('.rect1'+rect_counter); //dont user "+rec_co

我正在尝试使用KineticJs创建一个绘图画布,下面是JSFIDLE上的代码:

在上面的代码中,我试图创建一个rect,并为我创建的每个rect添加一个事件侦听器。。(第115行)

但是当我执行它时,如果我单击画布上的任何一个rect,事件将在我创建的最后一个rect上触发。。 我上面的代码有什么问题

致以最良好的祝愿, Luki R Rompis

您正在使用:

 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');
 });
尝试一个更基本的解决方法:---这一个最适合我-----------

hy:) 嗯..是的,在我的代码中,我使用rect_计数器的原因是我想跟踪我绘制的最后一个rect..所以我不需要从第一个rect开始循环来绑定事件

现在我(在mouseup事件中)已更改为:

现在它起作用了。到目前为止还不错。谢谢你的帮助:)

致以最良好的祝愿


Luki R Rompis

您的JSFIDLE无法工作,因为您没有动能.js和kode.js的参考
 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
var rects = stage.get('.rect'+rect_counter);
rects.on('click', function(){
    this.setAttrs({
        fill: 'red'
    });
    //layer.draw();
});