SortableJS — это мощная библиотека для реализации перетаскивания элементов в списках и сетках на веб-страницах. Она поддерживает как простое перетаскивание элементов, так и сложные сценарии с множественными списками, группировкой и анимацией.
Для начала работы необходимо подключить библиотеку:
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
Или установить через npm:
npm install sortablejs
Создание сортируемого списка выполняется через инициализацию нового
экземпляра Sortable:
const list = document.getElementById('items');
const sortable = new Sortable(list, {
animation: 150,
ghostClass: 'sortable-ghost',
handle: '.handle'
});
SortableJS предоставляет набор событий, которые позволяют контролировать процесс сортировки:
Пример использования события onEnd для обновления
позиции элементов:
sortable.on('end', function (evt) {
console.log(`Элемент ${evt.item.textContent} перемещён с позиции ${evt.oldIndex} на ${evt.newIndex}`);
});
SortableJS поддерживает работу с несколькими списками через свойство group.
const listA = document.getElementById('listA');
const listB = document.getElementById('listB');
Sortable.create(listA, {
group: 'shared',
animation: 150
});
Sortable.create(listB, {
group: 'shared',
animation: 150
});
Элементы можно перетаскивать между списками с одинаковой группой. Для
контроля допускаемых операций используется объект group с
ключами:
true, false,
"clone").SortableJS позволяет полностью кастомизировать визуальные эффекты перемещения. Основные свойства:
Пример CSS:
.sortable-ghost {
opacity: 0.4;
}
.sortable-chosen {
background-color: #f0f0f0;
}
Для динамических приложений часто требуется синхронизировать порядок элементов с сервером. После окончания сортировки можно отправлять обновлённый порядок элементов через AJAX:
sortable.on('end', function (evt) {
const order = Array.from(list.children).map(item => item.dataset.id);
fetch('/update-order', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({order})
});
});
Особенности работы с серверной валидацией:
SortableJS поддерживает динамическое добавление и удаление элементов.
Для корректной работы с серверной валидацией рекомендуется обновлять
атрибуты data-id каждого элемента и повторно
инициализировать сортировку при изменениях DOM:
function refreshSortable() {
Sortable.create(list, {
animation: 150,
onEnd: sendOrderToServer
});
}
localStorage.Использование SortableJS в связке с серверной валидацией обеспечивает надёжный контроль порядка элементов, предотвращает некорректные изменения и поддерживает высокую интерактивность интерфейса.