我正在制作一个滑动器与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();
});
你能放的jsfiddle或jsbin啄一起发布一个链接,这样我们可以看到有什么突破? – SoluableNonagon 2013-03-04 14:13:29
仍然可以使用该jsfiddle – SoluableNonagon 2013-03-04 16:28:32