gpt4 book ai didi

javascript - 如何找到可拖动元素相对于可放置区域的位置

转载 作者:行者123 更新时间:2023-11-28 06:52:06 25 4
gpt4 key购买 nike

我正在使用 HTML5 native 拖放。

我在查找可拖动元素相对于其父容器的位置时遇到问题。

任务摘要

我有一个“position:relative”div,我认为它是“可放置区域”。在这个 div 中,我有几个“position:absolute”图像元素,我已将它们标记为可拖动。我希望用户可以自由移动这些图像。

为了设置元素的位置,我在“dragend”上有一个监听器。

最后的顶部/左侧变量必须基于百分比而不是像素。

当前尝试

下面你可以看到我的尝试:

draggable.addEventListener('dragend', function (event) {
event.preventDefault();

//Gets the position of the two elements relative to the viewport
var droppableBoundingRect = droppable.getBoundingClientRect();

//Establishes the percentage using the droppable height and width
var draggableXPercentage = ((event.clientX - droppableBoundingRect.left) / droppable.clientWidth) * 100;
var draggableYPercentage = ((event.clientY - droppableBoundingRect.top) / droppable.clientHeight) * 100;

//Set the positional elements of the draggable element
event.target.style.top = draggableYPercentage + "%";
event.target.style.left = draggableXPercentage + "%";
}, false);

这是我希望完成的 JSFiddle,其中的评论显示了我期望每个部分执行的操作:

https://jsfiddle.net/oL8yd9Lr/

也许我在错误的森林里找错了树。我将不胜感激任何指导。

最佳答案

找到了可能的解决方案。它并不完美,但应该说明如何获得相对位置。我可能有点过分了,但我已经评论了重要的部分。

Fiddle

;
(function($, undefined) {
var dragging;

$(function() {
$('.dropzone').on({
'dragover dragenter': dragover,
'drop': drop
}).on({
'dragstart': dragstart,
'dragend': dragend
}, '.drag');
});

function dragstart(e) {
e.stopPropagation();
var dt = e.originalEvent.dataTransfer;
if (dt) {
dt.effectAllowed = 'move';
dt.setData('text/html', '');
dragging = $(this);
// Set the position of the mouse relative to the element at 0,0
dt.setDragImage(dragging.get(0), 0, 0);
}
}

function dragover(e) {
e.stopPropagation();
e.preventDefault();
var dt = e.originalEvent.dataTransfer;
if (dt && dragging) {
dt.dropEffect = 'move';
dragging.hide(); // Hide the element while dragging
}
return false;
}

function drop(e) {
e.stopPropagation();
e.preventDefault();
if (dragging) {
var dropzone = $(this);
// Get the offset of the dropzone relative to the window
var offset = dropzone.offset();
// Set the offset of the drag relative to the dropzone
dragging.css({
'top': e.clientY - offset.top,
'left': e.clientX - offset.left
});
dragging.trigger('dragend'); // Trigger the dragend
}
return false;
}

function dragend(e) {
if (dragging) {
dragging.show();
dragging = undefined;
}
}
}(jQuery));

关于javascript - 如何找到可拖动元素相对于可放置区域的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32869051/

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