2013-03-04 58 views
-1

我正在制作一个滑动器与kineticjs在哪里你可以动态地添加更多的句柄,以获得更多的句柄。重要的是,手柄可能不会跨越彼此。因为排名的顺序依然很重要。如何保持阵列中的其他对象(画布滑块)之间的阵列中的对象

我已经做了什么检查,如果对象中次序更高的对象的x值低于次序更低的对象。如果我制作了5个手柄,那么最后一个完美。如果我将它从第四个左边放下,它将会从第四个开始很好地放置。但是如果我将第四名放在第三名的左边,那么它将会到达第五名,而第五名将会接近第三名,而第四名则是这样。

它怎么会发生?有没有解决这个问题的方法?

container.addEventListener('mouseup', function(e) { 
handles = layer.getChildren(); 
     for(var m=handles.length; m--;) 
     { 
      if(m>0) 
      { 
       if (layer.get('#myRect'+m)[0].getAbsolutePosition().x < layer.get('#myRect'+(m-1))[0].getAbsolutePosition().x) 
       { 
        handles[m].setX(layer.get('#myRect'+(m-1))[0].getAbsolutePosition().x + 15); 
       } 
      } 
     } 
     layer.draw(); 
     Update(); 
    }); 

我发现layer.getChildren很杂乱。每次他给对象一个其他排序。然而,layer.get('#myRect'+(m-1))[0]更可靠。我保留了layer.getChildren进行计数。

编辑:我来发现,当你推自动数组中的layer.getChildren,它是更可靠,而你仍然有数组选项(layer.getChildren是不可靠的排名顺序)。

我的设计的问题是,你可以有一个时刻,如果你有两个真的。然后他总是这样做,而不是你总是想要的。所以我做了一个函数,它可以计算出你的句柄是向右还是向左,然后看看它是否跨越另一个句柄。对不起,有些麻烦的解释和代码。

var latestcoordinate = 0; 
var newcoordinate = 0; 

container.addEventListener('mousedown', function(e) { 
    latestcoordinate = 0; 
for (var x = 0; x < array.length; x++) { 

    latestcoordinate += parseInt(array[x].getAbsolutePosition().x); 
} 

}); 


container.addEventListener('mouseup', function(e) { 
    newcoordinate = 0; 
    for (var x2 = 0; x2 < array.length; x2++) { 
     newcoordinate += parseInt(array[x2].getAbsolutePosition().x); 
    } 

     for(var m=array.length; m--;) 
     { 
      if(m<array.length-1 && newcoordinate < latestcoordinate) 
      { 
       if (array[m].getAbsolutePosition().x < array[m+1].getAbsolutePosition().x) 
       { 
        array[m].setX(array[m+1].getAbsolutePosition().x + 15); 
       } 
      } 
      if(m>0 && newcoordinate > latestcoordinate) 
      { 
       if (array[m].getAbsolutePosition().x > array[m-1].getAbsolutePosition().x) 
       { 
        array[m].setX(array[m-1].getAbsolutePosition().x - 15); 
       } 
      } 

     } 
     layer.draw(); 
     Update(); 
    }); 
+0

你能放的jsfiddle或jsbin啄一起发布一个链接,这样我们可以看到有什么突破? – SoluableNonagon 2013-03-04 14:13:29

+0

仍然可以使用该jsfiddle – SoluableNonagon 2013-03-04 16:28:32

回答

0

不,这是解决方案,但我想你想从你添加转义为循环或使它成为一个“在”循环

for(var m=handles.length; m--;) 
    { 
     if(m>0) // <--- why isn't this clause in the for loop logic? 
     { 
      if (layer.get('#myRect'+m)[0].getAbsolutePosition().x < layer.get('#myRect'+(m-1))[0].getAbsolutePosition().x) 
      { 
       handles[m].setX(layer.get('#myRect'+(m-1))[0].getAbsolutePosition().x + 15); 
      } 
     } 
     else 
      break; 
    } 
+0

我不知道断词是什么,但确实在将来派上用场。 之所以我有(M> 0)关于那里是因为没有它会导致未定义的错误。它不在子句中的原因是因为我想要一个处理方向相同的方向,我需要(m 2013-03-04 15:04:50