Javascript 如何在阵列中的其他对象之间保持阵列中的对象(画布滑块)

Javascript 如何在阵列中的其他对象之间保持阵列中的对象(画布滑块),javascript,html5-canvas,kineticjs,Javascript,Html5 Canvas,Kineticjs,我用kineticjs制作了一个滑块,在这里你可以动态添加更多的手柄来获得更多的手柄。重要的是手柄不能相互交叉。因为重要的是等级的顺序仍然是相同的 我已经做了什么检查,如果一个对象的顺序较高,它的x值比顺序较低的对象的x值低。如果我做了5个手柄,最后一个就完美了。如果我把它从4号扔到左边,它会从4号扔到右边。但是如果我把第四个放在第三个的左边,它就会在那里,第五个会放在第三个的右边,而第四个会这样做 怎么会这样?这个问题有解决办法吗 container.addEventListener('mou

我用kineticjs制作了一个滑块,在这里你可以动态添加更多的手柄来获得更多的手柄。重要的是手柄不能相互交叉。因为重要的是等级的顺序仍然是相同的

我已经做了什么检查,如果一个对象的顺序较高,它的x值比顺序较低的对象的x值低。如果我做了5个手柄,最后一个就完美了。如果我把它从4号扔到左边,它会从4号扔到右边。但是如果我把第四个放在第三个的左边,它就会在那里,第五个会放在第三个的右边,而第四个会这样做

怎么会这样?这个问题有解决办法吗

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();
    }); 
container.addEventListener('mouseup',函数(e){
handles=layer.getChildren();
对于(var m=handles.length;m--;)
{
如果(m>0)
{
if(layer.get('#myRect'+m)[0].getAbsolutePosition().x
我发现layer.getChildren非常混乱。每次他都会给这些东西一个兰科德。但是,层.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();
    }); 
var-latestcoordinate=0;
var-newcoordinate=0;
container.addEventListener('mousedown',函数(e){
最新坐标=0;
对于(var x=0;xlatestcoordinate)
{
if(数组[m].getAbsolutePosition().x>数组[m-1].getAbsolutePosition().x)
{
数组[m].setX(数组[m-1].getAbsolutePosition().x-15);
}
}
}
layer.draw();
更新();
}); 

这不是解决方案,但我认为您希望添加for循环的转义,或者将其设置为“for-in”循环

    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;
    }
for(var m=handles.length;m--;)
{

如果(m>0)//你能把一个jsfiddle或jsbin东西放在一起并发布一个链接,这样我们就可以看到什么坏了吗?仍然可以使用这个jsfiddle我不知道break这个词是做什么的,但它在将来会派上用场。我为什么会使用(m>0)这是因为没有它会导致未定义的错误。它不在子句中的原因是因为我想有一个句柄,对相反的方向做相同的处理,我需要(m