Я думаю, это довольно сложная вещь, но это то, чего мне нужно достичь здесь.Я борюсь с этим пару дней.Я хотел бы иметь список, который можно сортировать.Также, когда нажата командная клавиша, я хотел бы использовать множественный выбор, чтобы я мог перемещать более одного элемента li.И это работает довольно хорошо.Но есть и другая часть задачи.Между элементами списка мне нужно иметь элемент изменяемого размера, это также элемент li с классом «to-resize».Но, как вы можете видеть на скрипке, которую я подготовил, я столкнулся с множеством проблем с этой частью.Я действительно надеюсь, что вы можете помочь с этим, ребята.
https://jsfiddle.net/xpvt214o/886030/
Ожидаемый результат: иметь ровно один элемент разрыва между каждыми двумя элементами списка.Если вы возьмете два элемента с помощью клавиши Command (Ctrl) и переместите их, то увидите, что между выбранными двумя нет пробела, как ожидалось.
class Ratings {
setChosenUsersList() {
$('.users-list.multiple').on('click', 'li', function (e) {
if (e.ctrlKey || e.metaKey) {
$(this).toggleClass("selected");
} else {
$(this).addClass("selected").siblings().removeClass('selected');
}
});
$('.users-list.multiple').sortable({
items: "li",
revert: 'true',
update: this.createResizableElements,
cursorAt: {
left: 50,
top: 45
},
helper: function (event, item) {
if (!item.hasClass('selected')) {
item.addClass('selected').siblings().removeClass('selected');
}
const helper = $("<li />");
const elements = item.parent().children('.selected');
const cloned = elements.clone();
helper.append(cloned);
elements.hide();
item.data('multidrag', cloned);
return helper;
},
stop: function (event, ui) {
const cloned = ui.item.data("multidrag");
ui.item.removeData("multidrag");
ui.item.after(cloned);
ui.item.siblings(":hidden").remove();
ui.item.remove();
},
});
}
createResizableElements() {
const sortableList = $('.users-list li');
if (sortableList.length > 1) {
$(sortableList).each(function (idx) {
if (idx < sortableList.length - 1) {
$(this).after('<li class="to-resize"></li>');
}
});
$('.to-resize').resizable({
minHeight: 1,
minWidth: 320,
maxHeight: 250,
maxWidth: 320
});
}
}
}
$(document).ready(function () {
const ratings = new Ratings();
ratings.setChosenUsersList();
});