gpt4 book ai didi

javascript - jQuery UI - 从放置区域拖动项目并将其放回同一放置区域 - 放置事件不会触发

转载 作者:行者123 更新时间:2023-11-28 07:01:50 24 4
gpt4 key购买 nike

我有多个放置区域 $('.drophere') 和一个可拖动对象存储 $('.dragme')。每个放置区域只能包含一个放置的项目。

您可以将新项目放置在已放置的项目之上(替换)。您可以将一项从一个放置区域拖动到另一个放置区域。

如果您开始从放置区域拖动项目并决定将其放回同一区域 - 放置事件不会触发,因此拖动的项目会丢失。

这是简化的代码:

var draggedData;
$('.drophere').droppable({
drop: function (event, ui) {
$(this).attr('data-text', draggedData);
$(this).draggable('enable');
}
}).draggable({
disabled: true,
helper: "clone",
start: function (event, ui) {
draggedData = $(this).attr('data-text');
$(this).attr('data-text', "").draggable('disable');
}
});

$('.dragme').draggable({
helper: "clone",
start: function (event, ui) {
draggedData = $(this).attr('data-text');
}
});

这是 jQuery UI 可删除的某种限制吗?有什么方法可以“忘记”此类拖动项目的起源吗?谢谢。

刚刚添加:http://jsfiddle.net/gpnpwwbw/

最佳答案

利用 jQuery Draggables Stop 事件,我想出了以下解决方案:

    var draggedData,
dropLastDragged
startPosData = {};

function checkIntersect(posData){
var left = startPosData.left,
top = startPosData.top,
right = startPosData.left+startPosData.width,
bottom = startPosData.top+startPosData.height,
cornerLeftPos = posData.left,
cornerTopPos = posData.top;

cornerLeftPos += startPosData.width/2;
cornerTopPos += startPosData.height/2;

if((cornerLeftPos > left && cornerLeftPos < right) && (cornerTopPos > top && cornerTopPos < bottom)){
return true;
}
return false;
}

$('.drophere').droppable({
drop: function (event, ui) {
dropLastDragged = false;
$(this).html(draggedData);
$(this).draggable('enable');
}
}).draggable({
disabled: true,
helper: "clone",
start: function (event, ui) {
startPosData.left = ui.offset.left;
startPosData.width = $(this).width();
startPosData.top = ui.offset.top;
startPosData.height = $(this).height();
draggedData = $(this).html();
$(this).html('Drop here').draggable('disable');
dropLastDragged = this;
},
stop: function(event, ui) {
if(dropLastDragged){
if(checkIntersect(ui.offset)){
$(dropLastDragged).html(ui.helper.html());
$(dropLastDragged).draggable('enable');
}
}
}
});

$('.dragme').draggable({
helper: "clone",
start: function (event, ui) {
draggedData = $(this).html();
}
});

Fiddle

关于javascript - jQuery UI - 从放置区域拖动项目并将其放回同一放置区域 - 放置事件不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32071155/

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