JQuery UI: перетаскивание и клонирование из оригинального div, но сохранение клонов
У меня есть div, в котором применяется jQuery UI Draggable. То, что я хочу сделать, - щелкнуть и перетащить это, и создать клон, который хранится в dom и не удаляться при удалении.
Подумайте о колоде карт, мой элемент коробки - это колода, и я хочу вытащить карты из этой колоды и уложить их на мою страницу, но они будут клонами оригинального div. Я просто хочу убедиться, что вы не можете создать другой клон одного из клонированных div.
Я использовал следующее, которое не срабатывало, как я хотел:
$(".box").draggable({
axis: 'y',
containment: 'html',
start: function(event, ui) {
$(this).clone().appendTo('body');
}
});
Я понял свое решение:
$(".box-clone").live('mouseover', function() {
$(this).draggable({
axis: 'y',
containment: 'html'
});
});
$(".box").draggable({
axis: 'y',
containment: 'html',
helper: 'clone'
stop: function(event, ui) {
$(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
}
});
Ответы
Ответ 1
Вот что я в итоге сделал:
$(".box-clone").live('mouseover', function() {
$(this).draggable({
axis: 'y',
containment: 'html'
});
});
$(".box").draggable({
axis: 'y',
containment: 'html',
helper: 'clone',
stop: function(event, ui) {
$(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
}
});
Ответ 2
Если вы tring для перемещения элементов (например, < li/ > ) из #source < ul/ > на #destination < ul/ > , и вы хотите, чтобы они клонировали (в отличие от перемещения) и по-прежнему сортировались справа, я нашел это решение:
$(function() {
$("#source li").draggable({
connectToSortable: '#destination',
helper: 'clone'
})
$("#destination").sortable();
});
Я знаю, что это кажется ультра простым, но это сработало для меня!:)
Ответ 3
Вот его решение:
$(".box-clone").live('mouseover', function() {
$(this).draggable({
axis: 'y',
containment: 'html'
});
});
$(".box").draggable({
axis: 'y',
containment: 'html',
helper: 'clone'
stop: function(event, ui) {
$(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
}
});
Ответ 4
Вот как я получил работу:
PS: "маркер" - это объект для перетаскивания, а "map" - контейнер назначения.
$(document).ready(function() {
//source flag whether the drag is on the marker tool template
var template = 0;
//variable index
var j = 0;
$(".marker").draggable({
helper: 'clone',
snap: '.map',
start: function(event, ui) {
//set the marker tool template
template = 1;
}
});
$(".map").droppable({
accept: ".marker",
drop: function(event, ui) {
$(this).find('.map').remove();
var item = $(ui.helper);
var objectid = item.attr('id');
//if the drag is on the marker tool template
if (template == 1) {
var cloned = $(item.clone());
cloned.attr('id', 'marker' + j++);
objectid = cloned.attr('id');
cloned.draggable({
containment: '.map',
cursor: 'move',
snap: '.map',
start: function(event, ui) {
//Reset the drag source flag
template = 0;
}
});
cloned.bind("contextmenu", function(e) {
cloned.remove();
return false;
});
$(this).append(cloned);
}
i++;
var offsetXPos = parseInt(ui.offset.left - $(this).offset().left);
var offsetYPos = parseInt(ui.offset.top - $(this).offset().top);
alert("Dragged " + objectid + " to (" + offsetXPos + "," + offsetYPos + ")");
}
});
});