我做了這樣的事情一次。我使用下面的代碼來進行拖動。
$(".draggable").draggable({
containment: '#content',
cursor: 'move',
snap: '#dropSlots',
snapMode: "inner",
start: function(){
Positioning.initialize($(this));
},
stop: function() {
Positioning.reset($(this));
}
});
使用此:
var Positioning = (function() {
return {
//Initializes the starting coordinates of the object
initialize: function (object) {
if (object.data("dragged") != "1") {
object.data("dragged", "1");
object.data("originalLocation", $(this).originalPosition = {top:0,left:0});
}
},
//Resets the object to its starting coordinates
reset: function (object) {
if (object.data("dragged") == "1" && object.data("inDroppable") != "1"){
var OriginalLocationTop = object.data("originalLocation").top;
var OriginalLocationLeft = object.data("originalLocation").left;
$(object).animate({top: OriginalLocationTop, left: OriginalLocationLeft}, 1500);
}
},
};
})();
正如你可以看到它使用object.data("inDroppable")
這是當一個可拖動的是在可投放下降設置。
可放開代碼:
$('.droppable').droppable({
drop: handleQuestionDrop,
out: handleQuestionMoveOut,
tolerance: "pointer"
});
這是通過以下兩個功能:
function handleQuestionMoveOut(event, ui) {
$(ui.draggable).data("inDroppable", "0");
// A lot of other project related stuff, deleted...
}
function handleQuestionDrop(event, ui) {
// position draggable directly on top of the slot
ui.draggable.position({
my: 'left top',
at: 'left top',
of: $(this),
using: function(css, calc) {
ui.draggable.animate(css, 250, "linear");
}
});
$(ui.draggable).data("inDroppable", "1");
}
正如你可以看到這是一個很大的代碼,我已經刪除了所有不相關的代碼。 那麼,這代碼實現如下:
- 給你的拖拽元素「起始座標」上拖動首次。
- 停止拖動這些可拖動塊時,檢查它們是否落在拖放點中。
- 如果他們這樣做,將其放置在插槽頂部。
- 如果他們沒有,他們位置上的原始座標的頂部
隨意問任何問題;)