我正在製作一個滑動器與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