Я только что закончил писать что-то подобное.Поскольку вы не определили позицию css для блоков, по умолчанию они являются относительными.Передача координат через offset () или position () приводит к «неправильному ответу», так как все координаты относятся к родительскому div.Что вы хотите сделать, это переместить блоки относительно ("+ = _ px" или "- = _px) в вашем одушевленном вызове.
Что я сделал, так это нашел разницу междуназначение и происхождение, и отрегулируйте анимационный вызов соответствующим образом. Этот fcn предполагает, что пункт назначения выше (ymmv);
function moveVidToDrop(dragItem, dropItem) {
var deltaTop = dropItem.offset().top - dragItem.offset().top;
var deltaleft = dropItem.offset().left - dragItem.offset().left;
var dirTop = '+=';
var dirLeft = '+=';
if (deltaTop < 0) {
dirTop = "-=";
deltaTop = Math.abs(deltaTop);
}
if (deltaleft < 0) {
dirLeft = "-=";
deltaleft = Math.abs(deltaleft);
}
dragItem.animate({ top: dirTop + deltaTop, left: dirLeft + deltaleft }, 0);
}
Аналогично, если вы хотите отправить перетаскиваемый программно домой, сделайте:
.animate({ left: "0px", top: "0px" }, "slow")