gpt4 book ai didi

javascript - Jquery 可拖放事件委托(delegate) : stop & drop

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

我的问题是获取放置元素的位置。
我在 .draggable 上使用 stop: 选项来获取新位置。

$('.elementsDiv').draggable({
revert: 'invalid', //Revert when drop fails
helper: 'clone', //Drag a clone
stop: function() {
//Dropped position.
Stoppos = $(this).position();
}
});

拖动时我想从它的父元素中删除该元素,并将其附加到它的新父元素。
这是我用 .droppable

做的
$('.flakUp, .flakDown').droppable({
accept: '.elementsDiv',
drop: function (event, ui) {

//get dragged element
var draggedElement = $(ui.draggable);

//get dropZone
var dropZone = $(this);

//Remove element from list and append it to dropZone
draggedElement.detach().appendTo(dropZone.position(Stoppos));

//Make element draggable
draggedElement.draggable();
}
});

当我删除/附加时,新位置将在左上角。
所以我必须从 .draggable 中获取放置的位置,并在 .droppable drop 函数中使用它来将元素移动到它被放置的位置。

这就是我的问题开始的地方!
在控制台中,我得到:Stoppos 未定义。
我想 droppable-drop 在 draggable-stop 之前执行?!

我该如何解决?
由于索引问题,我需要创建一个克隆。因此我还需要删除/附加元素。

最佳答案

我建议使用传递的函数的属性。

var stopPos = {};
var stopOff = {};

$('.elementsDiv').draggable({
revert: 'invalid', //Revert when drop fails
helper: 'clone', //Drag a clone
stop: function(e, ui) {
stopPos = ui.position;
stopOff = ui.offest;
console.log(stopPos, stopOff);
}
});

这将为您提供助手的位置和偏移量作为 {top, left} 对象。您可以稍后在将助手附加到可放置对象中时使用这些。

$('.flakUp, .flakDown').droppable({
accept: '.elementsDiv',
drop: function (event, ui) {
var draggedElement = $(ui.draggable);
var dropZone = $(this);

//Remove element from list and append it to dropZone
draggedElement.detach().appendTo(dropZone.position(stopPos));

//Make element draggable
draggedElement.draggable();
}
});

因此,您的代码表面上没有任何问题,但请注意一件小事,即变量 stopPosstopOff 的定义在函数之外。最后它应该是这样的:

  $(function(){
var stopPos = {};
var stopOff = {};

$('.elementsDiv').draggable({
revert: 'invalid', //Revert when drop fails
helper: 'clone', //Drag a clone
stop: function(e, ui) {
stopPos = ui.position;
stopOff = ui.offest;
console.log(stopPos, stopOff);
}
});

$('.flakUp, .flakDown').droppable({
accept: '.elementsDiv',
drop: function (event, ui) {
var draggedElement = $(ui.draggable);
var dropZone = $(this);

//Remove element from list and append it to dropZone
draggedElement.detach().appendTo(dropZone.position(stopPos));

//Make element draggable
draggedElement.draggable();
}
});
});

在这个方法中,变量可以被两者访问。如果您仅在函数内部定义它,则其他函数无法访问它。

关于javascript - Jquery 可拖放事件委托(delegate) : stop & drop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36494116/

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