2011-11-29 68 views
2

我有一個我想允許被拖到任何地方的元素。但是,如果它被拖放到拒絕它的droppable上(通過accept),我希望它在拖動之前恢復到原始位置。我怎樣才能做到這一點?只有當拖動到無效拖放時,我如何才能獲得可拖動的回覆到原始位置?

編輯:更具體一點:我希望滿足兩個條件,以便物品被移回:1.它被放在可投擲物上,並且2.可投擲物不接受所述物品。可拖動的還原選項只檢查條件2

回答

7

我有一些我認爲應該工作的代碼。請注意,它不使用accept選項來指定放置可接受的拖放對象。相反,您必須檢查拖放事件中是否應該手動拒絕可拖動。

 
$(document).ready(function() { 
    $('.droppable-class').droppable({ 
     drop: function(event, ui) { 
      // check whether or not draggable should be rejected here... 
      if (...) { 
       ui.draggable.data('rejected', true); 
      } 
     } 
    }); 

    $('.draggable-class').draggable({ 
     revert: false, 
     start: function(event, ui) { 
      ui.helper.data('rejected', false); 
      ui.helper.data('original-position', ui.helper.offset()); 
     }, 
     stop: function(event, ui) { 
      if (ui.helper.data('rejected') === true) { 
       ui.helper.offset(ui.helper.data('original-position')); 
      } 
     } 
    }); 
+1

輝煌!完美工作! – chacham15

+1

有沒有一種方法可以在原始位置淡入拖拽?我試圖改變顯示:none/block;設置,但它會改變其他元素的流向。謝謝! – Alfred

1

您想使用排序花花公子 - 是這樣的:

$('#sortable-area').sortable({ 
    accept: '.child', 
    items: '.child', 
    revert: 300, 
    opacity: 0.8, 
    containment: 'document' 
}); 

這應該自動捕捉元素回來,如果它不是足夠遠,以取代其他元素的。你只是把它放在容器上

+0

要指出的 - 你可以逃脫拖動時,「恢復」上面的選項是一個設置在其中,如果沒有達到其可棄父 – Jamie

+0

的問題是,該元素將返回速度我想讓項目移動到可排序不允許的空白空間 – chacham15

+0

沒關係 - 嘗試使用可拖動但給予恢復選項,正如我在之前的評論中提到的那樣,甚至可能存在真/假選項。 – Jamie

相關問題