SortableJS — это мощная библиотека на JavaScript, предназначенная для создания интерактивных списков с возможностью перетаскивания элементов. Она обеспечивает высокую гибкость и простоту интеграции, поддерживая как обычные списки, так и сетки с элементами различной структуры. Ключевой особенностью является минимальная зависимость от других библиотек: SortableJS работает независимо от jQuery и других фреймворков, что делает её легкой и универсальной для разных проектов.
Инициализация происходит через конструктор Sortable с
указанием контейнера и набора опций:
import Sortable from 'sortablejs';
const el = document.getElementById('items');
const sortable = new Sortable(el, {
animation: 150,
ghostClass: 'sortable-ghost',
onEnd: function (evt) {
console.log('Перемещён элемент:', evt.item);
}
});
Основные параметры:
animation — скорость анимации перемещения;ghostClass — CSS-класс для визуального эффекта
перетаскиваемого элемента;onEnd — обработчик события окончания
перетаскивания.SortableJS позволяет работать с вложенными списками и сетками,
поддерживая сортировку как в пределах одного контейнера, так и между
несколькими контейнерами. Опция group определяет
возможность перемещения элементов между разными списками:
const listA = document.getElementById('listA');
const listB = document.getElementById('listB');
Sortable.create(listA, {
group: 'shared',
animation: 200
});
Sortable.create(listB, {
group: 'shared',
animation: 200
});
Ключевой момент: использование одинакового имени
группы group: 'shared' позволяет элементам свободно
перемещаться между контейнерами, сохраняя порядок и применяя одинаковую
анимацию.
SortableJS предоставляет API для управления элементами на лету. Среди таких возможностей:
toArray() возвращает массив идентификаторов
элементов в текущем порядке;sort(order) позволяет программно сортировать
элементы по заданной последовательности;remove() и add() дают возможность
динамически удалять и вставлять элементы.Пример использования метода toArray():
const order = sortable.toArray();
console.log(order); // ['item1', 'item3', 'item2']
Программная сортировка:
sortable.sort(['item2', 'item3', 'item1']);
jQuery UI Sortable jQuery UI предоставляет
аналогичную функциональность через виджет sortable().
Отличия:
React Beautiful DnD Фокусируется на интеграции с React и использует виртуальный DOM для обновления интерфейса. Отличия:
Draggable (Shopify) Позволяет создавать интерфейсы с drag-and-drop для сеток и списков. Отличия:
Вывод по сравнению: SortableJS выигрывает за счёт простоты интеграции, минимальных зависимостей и широкого спектра встроенных функций. Она особенно эффективна для проектов, где требуется:
SortableJS оптимизирована для работы с сотнями элементов, благодаря
внутренней системе виртуальной перестановки DOM. Анимации реализованы
через requestAnimationFrame, что снижает нагрузку на
основной поток браузера.
Поддержка сенсорных устройств осуществляется автоматически через Pointer Events и Touch Events, без необходимости подключать сторонние плагины. Это позволяет создавать одинаково отзывчивый интерфейс как на десктопах, так и на мобильных устройствах.
ghostClass,
chosenClass, dragClass позволяют полностью
контролировать внешний вид перемещаемого элемента;onStart, onMove,
onEnd, onAdd, onRemove дают
полный контроль над процессом сортировки;filter можно
исключить из перетаскивания определённые элементы;sort() и
swap можно реализовать любые правила перестановки
элементов.SortableJS легко подключается к Vue, Angular, React без существенных ограничений. В Vue и React применяются обёртки, которые позволяют использовать библиотеку через директивы или компоненты, сохраняя при этом реактивность данных и оптимизируя обновление интерфейса.