SortableJS — это современная JavaScript-библиотека для реализации drag-and-drop сортировки элементов в веб-приложениях. Она поддерживает работу с DOM-элементами без зависимостей от сторонних фреймворков, хотя интеграция с React, Vue и Angular также возможна. Основная задача библиотеки — упрощение создания интерактивных списков и сеток, которые можно динамически менять местами с помощью перетаскивания мышью или касанием.
SortableJS можно подключить несколькими способами:
Через npm:
npm install sortablejs
Через CDN:
<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
После подключения библиотека предоставляет глобальный объект
Sortable, который используется для инициализации
сортируемых списков.
Инициализация производится вызовом конструктора Sortable
с передачей DOM-элемента и объекта настроек:
const list = document.getElementById('sortable-list');
const sortable = new Sortable(list, {
animation: 150,
handle: '.handle',
ghostClass: 'sortable-ghost'
});
Ключевые параметры:
animation — скорость анимации при перемещении элементов
(в миллисекундах).handle — селектор элемента внутри каждого элемента
списка, за который можно тянуть.ghostClass — CSS-класс для создаваемого “призрачного”
элемента во время перетаскивания.SortableJS предоставляет множество событий, которые позволяют отслеживать изменения в списках:
onStart — срабатывает при начале перетаскивания.onEnd — срабатывает при завершении перетаскивания.onAdd — срабатывает при добавлении элемента из другого
списка.onUpdate — срабатывает, когда элемент перемещен внутри
текущего списка.onRemove — срабатывает при удалении элемента в пользу
другого списка.Пример использования события onEnd:
sortable.option('onEnd', function (evt) {
console.log(`Элемент ${evt.item.textContent} перемещен с позиции ${evt.oldIndex} на позицию ${evt.newIndex}`);
});
SortableJS поддерживает богатый набор параметров, позволяющих гибко настраивать поведение:
group — объединяет несколько списков, чтобы можно было
перемещать элементы между ними. Может быть объектом с name
и pull/push правилами.sort — включение/отключение сортировки внутри
списка.filter — селектор элементов, которые нельзя
перетаскивать.draggable — селектор элементов, которые можно
перетаскивать.delay — задержка перед началом перетаскивания (полезно
для сенсорных устройств).swap и swapThreshold — позволяют менять
элементы местами вместо перетаскивания на свободное место.Пример использования группы списков:
const groupOptions = {
group: { name: 'shared', pull: true, put: true },
animation: 200
};
Sortable.create(document.getElementById('list1'), groupOptions);
Sortable.create(document.getElementById('list2'), groupOptions);
При работе с CI/CD (Continuous Integration / Continuous Deployment) важно учитывать тестируемость и стабильность drag-and-drop функционала:
Sortable#option('onEnd', ...).package.json предотвращает неожиданное
поведение после обновлений.animation и CSS-трансформации могут быть использованы для
плавного перемещения элементов без перерисовки всего DOM.onEnd и onUpdate.onEnd и onAdd.SortableJS обеспечивает универсальный и гибкий инструмент для создания динамичных интерфейсов с drag-and-drop функционалом, легко адаптируемый под требования CI/CD процессов и современных веб-приложений.