![](/img/trans.png)
[英]How do I find the position of the draggable element relative to the droppable area
[英]Make coordinates of draggable element relative to droppable element after appending to it
我正在尝试为jQueryUI中使用draggable和droppable元素的网站制作工具。
我有一个div
包含元素(draggables)和一个div
元素将被移动到(droppable)。 它们是完全独立的div
,一旦元素被放入droppable div
它就需要移动到那里。
我有代码可以移动它,让droppable接受正确的东西,甚至代码保持可拖动元素只在droppable div
可拖动。 最初将可拖动元素拖到droppable div
时会出现问题。
它保留了包含可拖动元素的原始div
的坐标。 因此,当我将它附加到新元素时,它会出现偏移。 我可以将它移动到droppable div
之后就好了,它按预期工作,但如果从一开始它不能存在就没有多大帮助。
有没有办法让它转换坐标以匹配droppable div
的坐标,所以它出现在页面上的相同位置但是在DOM上的droppable div
内?
例:
HTML
<div id="MoveZone" class="Container">
<div id="MoveMe"></div>
</div>
<div style="height: 10px;"></div>
<div id="DropZone" class="Container"></div>
CSS
.Container {
outline-style: solid;
outline-color: black;
outline-width: 3px;
height: 100px;
width: 100px;
}
#MoveMe {
outline-style: solid;
outline-color: blue;
outline-width: 2px;
height: 20px;
width: 20px;
background-color: ghostwhite;
}
JavaScript的
$(document).ready(function () {
$('#MoveMe').draggable({
revert: 'invalid'
});
$('#DropZone').droppable({
accept: '#MoveZone div, #DropZone div',
drop: function (event, ui) {
ui.draggable.detach().appendTo($(this));
ui.draggable.draggable('option', 'containment', 'parent');
}
});
});
我确实找到了一种方法来做到这一点。 但它需要在droppable div
的id中进行硬编码......我并不特别喜欢。 此外,当它掉落时,它略微偏向左上角,所以即使这样也不完美,因为如果它被放在左上角,它将部分开箱即用。
编辑:
我能想到的另一种方法是如何计算方框之间的偏移量以及调整drop方法中的位置。 但我不确定我会怎么做,特别是因为在我的网站上,可放置点的位置不会是静态的。 (它以页面为中心,因此可能略有移动。)
我找到了解决问题的解决方案。 以下JavaScript就是它的作用。
$(document).ready(function () {
$('#MoveMe').draggable({
revert: 'invalid',
cursor: 'move'
});
$('#DropZone').droppable({
accept: '#MoveZone div, #DropZone div',
drop: function (event, ui) {
var parent = ui.draggable.parent();
var draggedElement = $(ui.draggable);
var dropZone = $(this);
var leftOffset = Math.abs(parent.offset().left - dropZone.offset().left);
var topOffset = dropZone.offset().top - parent.offset().top;
draggedElement.detach().appendTo(dropZone);
draggedElement.css('left', draggedElement.position().left - leftOffset);
draggedElement.css('top', draggedElement.position().top - topOffset);
draggedElement.draggable('option', 'containment', 'parent');
}
});
});
基本上,你只是计算两个div
元素之间的偏移量,当它被附加到droppable div
你将顶部和左侧CSS调整为新的那个。
出于某种原因,它在JSFiddle中不起作用,但确实有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.