gpt4 book ai didi

javascript - 追加后,使可拖动元素相对于可放置元素的坐标

转载 作者:行者123 更新时间:2023-11-29 14:51:23 25 4
gpt4 key购买 nike

我正在尝试为使用 jQueryUI 中的可拖放元素的网站制作一个工具。

我有一个 div 包含元素 (draggables) 和一个 div 元素将被移动到 (droppable)。它们是完全独立的 div,一旦元素被放入可放置的 div 中,就需要将其移动到那里。

我有用于移动它的代码,让可放置的元素接受正确的东西,甚至还有代码来保持可拖动元素只能在可放置的 div 中拖动。当您最初将可拖动元素拖动到可放置的 div 时会出现此问题。

它保留了包含可拖动元素的原始 div 的坐标。所以,当我将它附加到新元素时,它看起来偏移了一堆。之后我可以将它移到可放置的 div 中,它会按预期工作,但如果它不能从一开始就存在,那就没什么用了。

有没有办法让它转换坐标以匹配可放置的 div 的坐标,以便它出现在页面上的同一位置但位于可放置的 div 内> 在 DOM 上?

示例:

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');
}
});
});

Fiddle

我确实找到了一种方法来做到这一点。但它需要在可放置的 div 的 id 中进行硬编码...我不是特别喜欢。此外,当它被放下时,它会稍微向左上角偏移,所以即使这样它也不是完美的,因为如果它被放在左上角,它会部分脱离盒子。

Other Fiddle

编辑:
我能想到的唯一其他方法是计算框之间的偏移量并调整 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 中不起作用,但它确实有效。

关于javascript - 追加后,使可拖动元素相对于可放置元素的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25171777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com