添加可拖放元素后,使其相对于可拖放元素的坐标
Make coordinates of draggable element relative to droppable element after appending to it
我正在尝试为一个使用可拖放元素的网站制作一个工具,从jQueryUI.
我有一个包含元素(可拖拽)的div
和一个元素将被移动到(可拖拽)的div
。它们是完全独立的div
,一旦一个元素被放入可掉落的div
中,它就需要被移动到那里。
我有代码可以移动它,让可拖放的接受正确的东西,甚至代码来保持可拖放的元素只在可拖放的div
中可拖放。当您最初将可拖拽元素拖拽到可拖拽的div
时,问题就出现了。
它保留了包含可拖动元素的原始div
的坐标。所以,当我把它附加到新元素上时它看起来偏移了很多。我可以将它移动到可掉落的div
之后,它就像预期的那样工作,但如果它不能从一开始就存在,那就没有多大帮助了。
有没有办法只是让它转换坐标,以匹配可降的div
,所以它出现在页面上的同一位置,但在DOM上的可降的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');
}
});
});
小提琴在某种程度上,我确实找到了一种方法。但它需要硬编码在可掉落的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
元素之间的偏移量,当它被附加到可拉的div
时,你调整顶部和左侧的CSS到新的。
由于某些原因,它不能在JSFiddle中工作,但它确实可以。
相关文章:
- 区分不同的可拖放元素(jQuery 拖放)
- JavaScript/jQuery在两个iframe之间拖放元素
- 由javascript创建的HTML5拖放元素:
- 拖放 - 元素不会拖放
- 如何使用HTML2canvas截取拖放元素的屏幕截图
- 拖放元素可以移动 x 但不能移动 y
- HTML5 拖放 - 将选择文本拖放到可拖放元素
- 使用jQuery拖放元素
- 添加可拖放元素后,使其相对于可拖放元素的坐标
- 如何找到可拖放元素相对于可拖放区域的位置?
- 获取日历中可拖放元素的开始和结束日期
- 如何使动态创建的元素接受可拖放元素
- 如何保留拖放元素的位置?
- Jquery .data在可拖放区域的可拖放元素上一直没有定义
- Javascript: handleDragLeave和handleDragEnd没有移除拖放元素时的类效果
- 在用户生成的可拖放矩阵中对可拖放元素居中
- 不能在拖放后再拖放元素
- js在两张纸之间拖放元素
- 为带有量角器的离子应用程序创建一些测试,以测试用户是否可以成功地在chrome上拖放元素
- 如何在拖放元素时执行函数