2010-08-24 18 views
2

我有一個問題,我無法解決。jquery sortable的絕對定位'處理'問題 - 不影響排序,而排序元素範圍外部

我有一個Basecamp類似的項目列表,左邊有一個小菜單,拖動,編輯和垃圾桶圖標。

手柄在那裏。他坐在可排序元素的範圍之外,這就是他爲什麼不影響排序的原因。

The problem demonstration

正如你看到的,我拖着圖標是在左邊。他不在{LI}範圍內。 LI結束於char結束的位置,所以Handle離開了他的父項,並且不會影響所有的排序並且不會啓動它。

當我拖動它,但將鼠標移動到LI的邊界內時,則會影響和排序,如同它假設的那樣。

我能做些什麼。我打破了我的頭,尋找一個處理偏移的屬性,或者以任何方式爲他定義我的處理超出了你的範圍。

我希望任何人在過去面對過這件事,並可能有所幫助:) 我認爲要放置一個子彈圖像bg,並且這樣可以給它左側更多的空間。 可能做的伎倆... :)

謝謝

回答

5

我能夠通過重寫,決定是否光標在元素與否的方法來解決這個問題。由於我的列表與您的列表是垂直的,因此我撕掉了水平位置的檢查,以便它只檢查垂直位置。這樣光標在水平位置並不重要。

後,你的主要jquery.ui.js包括和你的排序代碼之前只是把這個覆蓋方法:

// UI Fix for draggable 
$.extend($['ui']['sortable'].prototype, { 
    _intersectsWithPointer: function(item) { 

     var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), 
      verticalDirection = this._getDragVerticalDirection(), 
      horizontalDirection = this._getDragHorizontalDirection(); 

     if (!isOverElementHeight) 
      return false; 

     return this.floating ? 
      (((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1) 
      : (verticalDirection && (verticalDirection == "down" ? 2 : 1)); 

    } 
}); 

顯然,這打破了水平排序功能,所以你只希望把它列入在你的特殊情況下。

親愛的jQuery UI團隊:調用功能來處理這個使用一個選項。 :)

SammyK

+0

自該項目啓動以來經過了很長時間。 謝謝你的回答,我一定會嘗試在我未來的項目中使用。謝謝(Y) – neoswf 2011-05-03 19:17:03

+0

幫助我也...謝謝! – 2011-08-26 04:53:33

+0

輝煌的工作。我一直在關注你的工作,試圖修復這個bug,因爲我有(或者我想)與你一樣的問題。一個專業的設計團隊創建了這個UI,我不得不做出工作,並在列表項外加上一個句柄。所以我將你的補丁轉換成CoffeeScript,並將其粘貼在jQuery - >和我的代碼之間。它按照現在應該的方式運作。非常感謝。 – 2012-03-13 19:20:00

3

我有同樣的問題。

我注意到這裏存在提交了開放的錯誤:http://bugs.jqueryui.com/ticket/3022#comment:9

除了聲稱可以解決這個問題拉入請求:https://github.com/jquery/jquery-ui/pull/915

這是一個有點痛,它依然沒有得到這些年來都是固定的。

無論如何,我正在考慮做一個像SammyK所建議的改變,但後來發現在v1.10.3中有一個axis選項。我不確定這是否存在於以前的jQuery UI版本中。

但設置axis修復這個問題對我來說:

$('.items').sortable({ 
    containment:'parent', 
    handle:'.move', 
    opacity:0.5, 
    axis:'y' 
}); 

我現在把手可以駐留在我的可拖動的項目之外,但仍然能夠拖動的項目上下正確。

+0

你可以添加演示嗎? – 2017-08-25 18:25:24

相關問題