Немного неясно, почему вы используете различные библиотеки jQuery UI. Я бы посоветовал вам перейти только на одну конкретную библиотеку.
$(function() {
function makeDrag(obj) {
obj.draggable({
revert: "invalid",
stack: "#dragged .box img",
helper: 'clone'
});
return obj;
}
$('#dragged img').draggable({
stack: "#dragged .box img",
helper: 'clone',
});
$('#dropped').droppable({
accept: "img",
drop: function(event, ui) {
var droppable = $(this);
var draggable = ui.draggable;
var newImg = $("<img>", {
src: draggable.attr("src")
}).css("float", "left").appendTo(droppable);
makeDrag(newImg);
}
});
});
.box {
width: 100%;
height: 310px;
}
.box img {
float: right;
}
hr {
clear: both;
}
#dropped {
width: 100%;
height: 310px;
background-color: #000;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="dragged">
<div class="box">
<img alt="" src="https://via.placeholder.com/30x100/0f0/fff.png" />
<img alt="" src="https://via.placeholder.com/30x200/ff0/000.png" />
<img alt="" src="https://via.placeholder.com/30x300/00f/fff.png" />
</div>
</div>
<hr />
<div id="dropped">
</div>
Одна проблема, которую я подозреваю, это опция accept
, это должен быть один конкретный селектор. Помните, что перетаскиваемый элемент является только конечным объектом и не включает его родителей. Таким образом, если элемент img
перетаскивается из .box
, сам объект по-прежнему просто img
. Таким образом, вы не захотите включать родительские селекторы.
Для клонирования, возможно, просто лучше создать новое изображение или элемент. Поскольку Источник клонирован, он удаляется, когда Пользователь удаляет элемент. Он может часто удалять цель или влиять на источник.