Хорошо, во-первых, если вы читаете сортируемые документы jQuery, вы знаете, что сортируемые объекты приобретают свойства перетаскиваемых объектов.
Таким образом, когда вы инициализируете сортируемые объекты, вы можете установить определенные свойства для обработкисортируемые события («начало», «остановка», «получение» и т. д.)
var sortableOptions = {
cursor: "move",
placeholder: "sortable-placeholder",
tolerance: "pointer",
opacity: 0.8,
scroll: true,
connectWith: '.list1',
helper: function(e, li) {
copyHelper = li.clone().insertAfter(li);
return li.clone();
},
stop: function() {
copyHelper && copyHelper.remove();
},
receive: function(e, ui) {
let string='<small>'+ui.item[0].innerHTML+"</small>"
ui.item.prev().html(ui.item.prev().html()+string);
ui.item.remove()
copyHelper=null;
},
scrollSensitivity: 100,
}
Обратите внимание на параметр connectWith
- он гарантирует, что ваши списки подключены.Я подготовил скрипку, которая должна воспроизводить ожидаемое поведение:
JSFiddle .
Предупреждение: Текущий код не проверяет дубликаты,поэтому, если вы передадите item1 из list1 в list2 и вернетесь снова, элемент list1 будет дубликатом в list1!
EDIT
Я изменил скрипкуи фрагмент кода, чтобы отразить то, что вы просили, Здесь
Обратите внимание, что если вы продолжаете изменять элементы из списка в список, они будут все больше увеличиваться.Я не исправил, потому что это может быть поведение, которое вы ожидаете.
EDIT2
Хорошо, теперь вы попросили что-то, что заставило меня почесать голову: P
Итак, мое решение для вас:
Измените CSS на:
.list1,
.list2 {
list-style-type: none;
width: 40%;
float: left;
margin-right: 30px;
}
.list1 .item,
.list2 .item {
float: left; //THIS ONE IS THE IMPORTANT ONE
border: 1px solid gray;
padding: 10px;
}
.sortable-placeholder {
border: 1px dotted #e6e6e6;
height: 40px;
color: #fff;
}
Это сделает ваши списки горизонтальными (делая очень очевидным, к какому элементу выдобавляемся).
Однако, если вы хотите перейти к вертикальному списку, мой совет - прекратить использование прокрутки, если только вам это не нужно.Из моего исследования, прокручиваемый всегда будет «пробел» для нового элемента, поэтому либо вы:
- Изменить библиотеку jquery (IMO, кажется, плохая идея),
- Вы добавляетеновые прослушиватели событий (mouseup / mousedown / mousemove) для каждого элемента списка.
- Или вы отказываетесь от прокручиваемого и «жёсткого» кода нужного вам поведения.
JSFiddle