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て、それを実際のキネティック ノードとして割り当てる方が簡単だと思います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 と deselect という名前を付けたので、ノードが選択されていない場合がわかります。

キネティック オブジェクトを変数に保存したdestroy()ので、そのノードで (キャッシュしたくないので) 簡単に呼び出すことができます。

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

作業例: jsfiddle

注:グループにはすべてのアンカーと画像が含まれているため、グループを破棄します。

また、var layer;アプリケーション スコープでグローバルに宣言したため、関数内のvar宣言を削除する必要がありました。その方法は、Jquery Ready Function からグローバルにアクセスできます。layerinitStagelayer

于 2013-07-10T16:27:33.790 に答える