2013-07-10 28 views
0

我的代码是在这个linkKineticJS - 删除选定的图像

在专门找:

$d('#delete').click(function(){ 
     var toRemove = imageSelected; 
     if(toRemove !== false) 
     { 
      var groups = layer.get('Group'); 
      for(var j=0; j < groups.length; j++) 
      { 
       var gid = groups[j].getId(); 

       if(gid == toRemove) 
       {   
        groups[toRemove].destroy(); 
        imageSelected = false; 
        layer.clear(); 
        deselect();    
        sources[toRemove] = null; 
        j = groups.length; 
       }   
      } 
     }  
    }); 

我所试图做的事: 1)用户应能点击任何图像(即锚点出现),然后是画布下的“删除”链接。图像应该消失(我不需要缓存等)。

2)用户应该可以点击“添加猴子” - 在画布下点击任意图片(包括新添加的猴子)并删除它。

我认为,一旦我实现了上述 - 我应该更好地理解kinetic的运作 - 现在我很困惑!

很多感谢您的帮助!

回答

2

在我看来,我认为只需使用一个名为selectedNode的变量并将其指定为您正在选择的实际Kinetic节点而不是其id即可。

selectedGroup = new Kinetic.Shape({name:'emptyNode'});

function select(node) { 
    ... 
    selectedGroup = node.parent; 
    ... 
} 

function deselect() { 
    ... 
    selectedGroup = new Kinetic.Shape({name:'emptyNode'}); 
    ... 
} 

我命名为selectedGroup上name: 'emptyNode' init和取消,这样你可以知道什么时候就没有选择的节点。

现在您已将动力学对象存储在变量中,因此您可以轻松地在该节点上调用destroy()(因为您不想将其缓存)。

$d(function() { 
    $d('#delete').click(function(){ 
    if (selectedGroup.getName() !== 'emptyNode') { 
     selectedGroup.destroy(); 
     layer.draw(); 
    } 
    }); 
}); 

工作例如:jsfiddle

注:我们要灭团,因为它包含了所有的锚和图像。

另外,由于您在申请范围内全局声明了var layer;,因此我必须在您的initStage函数中删除varlayer的声明。这种方式layer可以在全球范围内访问您的Jquery Ready功能。

+1

您可能也可以安全地注释掉或移除您的selectedImage和selectedImageID代码。 – projeqht

+1

非常感谢 - 我到了那里! – jagku