2013-02-12 66 views
0

我有两个重叠的形状,并且我想在拖动两个单击时重叠。是否有捷径可寻?拖动两个重叠的形状

+0

不是最简单的,而简单,它们添加到组并拖动组。你可以用.getIntersections(position)得到相交的形状。然后在点击时将这些形状添加到组中,然后模拟dragstart。 – SoluableNonagon 2013-02-12 14:44:39

+0

你可以提出一个你迄今为止尝试过的jsfiddle吗? – SoluableNonagon 2013-02-12 18:49:54

回答

0

http://jsfiddle.net/JPeJF/1/

这是一个小马车,但你可以美化它,但它确实你问什么,只是需要一些更多的逻辑/抛光。

你需要看的主要代码是:

shapesLayer.on('mousedown', function(){ 
    var userPos = stage.getUserPosition(); 
    var intersected = shapesLayer.getIntersections(userPos); //gets all shapes intersecting at click position 
    for(var i = 0; i < intersected.length; i++) { 
     intersected[i].moveTo(group2); // moves intersected shapes to a new group , need to add some code so that when item is moved to new group it keeps it's position 
    } 
    group2.simulate('dragstart'); //simulate dragging 
    shapesLayer.draw(); 
    }); 

    shapesLayer.on('mouseup', function(){ //when mouse is released 
    var kids = group2.getChildren(); 
    for(var i = 0; i < kids.length; i++) { 
     kids[i].moveTo(shapesLayer);  //place back in original container 
    } 
    shapesLayer.draw(); 
    }); 
+0

我喜欢它,但它不适合我 - getIntersections(pos)没有任何功能。也就是说,如果模拟('dragstart')导致形状开始拖动,我可以直接在形状上调用它吗? – Narfanator 2013-02-12 18:40:14

+0

好吧,你不能在节点上使用'getIntersections(pos)',只能使用容器,但是你可以'模拟(事件)'几乎任何东西,所以你可以直接在形状上调用它。有很多不同的方式可以实现你想要做的事情,我只是尝试创建一个快捷方式。该解决方案需要额外的位置信息,以便您可以拖动所需的项目。 – SoluableNonagon 2013-02-12 18:49:27