0

我的代码在这个链接中

具体来看:

$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)用户应该能够点击“添加猴子” - 在画布下,点击任何图像(包括新添加的猴子)并将其删除。

我认为一旦我实现了上述内容 - 我应该更好地理解动力学的工作原理 - 现在我感到困惑!

非常感谢您的帮助!

4

1 回答 1

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'on init 并取消选择,这样您就可以知道何时没有选择节点。

现在您已将 Kinetic Object 存储在变量中,您可以destroy()在该节点上轻松调用(因为您不想缓存它)。

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

工作示例:jsfiddle

注意:我们要销毁组,因为它包含所有的锚点和图像。

哦,而且,由于您var layer;在应用程序范围内全局声明,我不得不删除var函数layer内部的声明initStagelayer您的 Jquery Ready 函数可以全局访问这种方式。

于 2013-07-10T16:27:33.790 回答