2011-11-29 31 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

相关问题