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