2013-07-29 175 views
0

我想讓拖動的元素相交任何可拖動的元素拖動項目恢復舊的位置。任何關於它的想法?Jquery Draggable元素相交

   $("#MainContents div[name=draggable]").each(function() { 
$(this).draggable({containment: 'parent', 
    scrollSpeed: 1000, 
    cursor: "crosshair", 
    scroll:true, 
disabled: DragDropState, 
stop: function(event, ui) { 
     var Stoppos = $(this).position(); 
     var parentPosition=$(this).parent().position(); 
     var CalculatedTop=Stoppos.top-parentPosition.top; 
     var CalculatedLeft=Stoppos.left-parentPosition.left; 
     } 
    }); 
}); 
+0

你問的是什麼時候拖拽元素被拖放到另一個可拖曳元素上,你想要剛剛拖拽的元素返回原來的位置? –

+0

是的。元素丟棄到其他可拖動元素時。它會回來。 – user2622044

回答

1

您需要在拖動開始時記錄它來自哪裏,然後檢查拖動停止的疊加層。看看這個jsfiddle example

簡而言之,擴展你的可拖動選項數組以包括開始,記錄數據對象中的頂部/左側位置,然後停止,檢查DOM中的其他可拖動項目並調用返回函數火柴。

例如:

$(this).draggable({ 
start: function() { 
    var div = $(this); 
     div.data('top', div.css('top')); 
     div.data('left', div.css('left')); 
}, 
containment: 'parent', 
    scrollSpeed: 1000, 
    cursor: "crosshair", 
    scroll:true, 
disabled: DragDropState, 
stop: function(event, ui) { 
     var draggables = $('.ui-draggable'); 
     var div = $(this); 
     var goHome = function() { 
      div.css('left', div.data('left')); 
      div.css('top', div.data('top')); 
     }; 

     draggables.not(div).each(function() { 
      var curr = $(this); 
      var currPos = curr.position(); 
      var divPos = div.position(); 
      if (divPos.left >= currPos.left && divPos.left <= (currPos.left + curr.width())) { 
       if (divPos.top >= currPos.top && divPos.top <= (currPos.top + curr.height())) { 
        goHome(); 
       } 
      } 
     }); 
    }; 
}); 

我敢肯定,這樣的事情是你在找什麼做的。順便說一句,從這裏你可以動畫回覆函數,使其優雅地回到它最後的位置。

+0

謝謝,它實際上沒有抓到,但你給了我主意。我剛在想。也許有一個函數返回true或false,像java中的intersect函數。 – user2622044