【发布时间】:2019-06-30 22:47:36
【问题描述】:
我正在尝试将“模板”(最初作为克隆)从“商店”拖到可放置的插槽中。此后,我希望能够将拖动的项目放入我希望的任何插槽中。 Draggables设置如下:
$( ".template" ).draggable({
helper: "clone",
}
);
$( ".item" ).draggable();
我解决了重新克隆的问题,方法是在第一次放置时将“模板”类替换为“项目”类,并在放置函数中从克隆元素切换到直接元素,如下所示:
$( ".template-slot" ).droppable({
accept: ".template, .item",
drop: function( event, ui ) {
if(ui.draggable.hasClass("template")) {
$(this).append(ui.draggable.clone())
// add item class
$(".template-slot .template").addClass("item");
// remove template class
$(".item").removeClass("ui-draggable template");
// expand to fit the slot
$(".item").addClass("expand-to-slot");
// make it draggable again
$(".item").draggable();
}
if(ui.draggable.hasClass("item")) {
$(this).append(ui.draggable);
}
}
});
第一次拖放工作正常。问题出现在第二次拖放。该元素可以拖动,但是当放下它时,无论我拖动它的方向,它都会放置两倍的距离。因此,例如,如果我将它向右拖动 50 像素,它会向右下降 100 像素。上下等也一样。
我怀疑这与偏移量累积有关,但尚未弄清楚为什么会这样做或如何解决它。
我在这里创建了一个小提琴:https://jsfiddle.net/stefem1969/a86jmnxu/10/ 来显示问题。
希望有人能提供帮助。
【问题讨论】:
标签: javascript jquery jquery-ui jquery-ui-draggable jquery-ui-droppable