【发布时间】:2011-04-20 19:00:30
【问题描述】:
我有一个可拖动的项目,如果不放在 droppable 中,它将恢复。直到用户在 droppable 中放置一个项目之前,这都很好。如果他们认为他们在任何时候都犯了错误,他们将可拖动的对象拉出,它会恢复为可放置的对象。我希望在退出并停用可拖动对象时返回到其原始容器。
我的代码在下面,但我提供了a sample on jsFiddle。
HTML
<div id="origin">
<div id="draggable" class="ui-widget-content">
<p>I revert when I'm not dropped</p>
</div>
</div>
<div id="droppable" class="ui-widget-header">
<p>Drop me here</p>
</div>
JavaScript
$(function() {
$("#draggable").draggable({
revert: function(dropped) {
var dropped = dropped && dropped[0].id == "droppable";
if(!dropped) alert("I'm reverting!");
return !dropped;
}
}).each(function() {
var top = $(this).position().top;
var left = $(this).position().left;
$(this).data('orgTop', top);
$(this).data('orgLeft', left);
});
$("#droppable").droppable({
activeClass: 'ui-state-hover',
hoverClass: 'ui-state-active',
drop: function(event, ui) {
$(this).addClass('ui-state-highlight').find('p').html('Dropped!');
},
out: function(event, ui) {
// doesn't work but something like this
ui.draggable.mouseup(function () {
var top = ui.draggable.data('orgTop');
var left = ui.draggable.data('orgLeft');
ui.position = { top: top, left: left };
});
}
});
});
【问题讨论】:
-
Unfortunately, for my purposes out fires too soon (the moment the draggable leaves.)这不正是out的目的吗?您是否只想知道他们是否mouseup而out? -
@drachenstern 好主意。我将在 out 事件中进行试验,但无论哪种方式都不能解决可拖动恢复为可放置的问题。
-
很高兴我能提供帮助,但仍然不确定我在你的脑海中触发了什么。我认为,一旦你移动它,draggable 就会失去它的“home”droppable。您可能需要将该信息存储在某个辅助方法中。
-
@drachenstern 我打算存储原始位置。我只是无法让它使用它而不是它在可放置中的新位置。 :( 顺便说一句:代码已更新以反映您的好建议。
-
您需要两个可放置的区域。当你没有超过任何一个,并且你返回
!dropped,那是你需要处理下降到哪里的时候。不要在 out 或 mouseup 上执行此操作。一旦你放在可放置区域上,它就没有任何地方可以放置还原了。 (或者,当您没有检测到您在可放置区域上方时,只需删除“位置:相对”)