SortableJS — это библиотека для реализации перетаскивания элементов списка с полной поддержкой drag-and-drop на чистом JavaScript. Она позволяет создавать интерактивные интерфейсы с возможностью сортировки элементов как в одном списке, так и между несколькими списками одновременно.
Ключевой особенностью является легковесность и независимость от сторонних фреймворков, что делает библиотеку универсальной для интеграции в любые проекты.
import Sortable from 'sortablejs';
const el = document.getElementById('items');
Sortable.create(el, {
animation: 150,
ghostClass: 'sortable-ghost'
});
В приведенном примере создается экземпляр Sortable для элемента с
идентификатором items. Параметр animation
задает длительность анимации перемещения, а ghostClass
позволяет применить стили к элементу, который перемещается.
Обратная совместимость в контексте SortableJS означает, что новые версии библиотеки стремятся сохранять совместимость с кодом, написанным для предыдущих версий. Это критично для крупных проектов, где обновление библиотеки может затронуть сотни или тысячи строк кода.
SortableJS ориентирован на современные версии браузеров, но учитывает следующие аспекты:
С выходом новых версий API иногда меняется:
Sortable.create,
sortable.destroy).onStart,
onEnd, onAdd, onUpdate)
сохраняются, однако некоторые вспомогательные события могли быть
переименованы или улучшены для большей точности.swapThreshold и invertSwap появились
в версии 1.10, но старые опции продолжают работать.Для сохранения обратной совместимости рекомендуется:
SortableJS хорошо интегрируется с фреймворками, но важно учитывать:
jquery-ui-sortable, если проект
использует старые подходы.Некоторые старые версии имеют ограничения, о которых следует помнить при работе с обратной совместимостью:
multi-drag и
swap функционал.event.originalEvent, тогда как новые версии используют
нативный Event.toArray() и sort()
работали без учета ключей data-id, что иногда требовало
ручной синхронизации массива данных.package.json — использование конкретной стабильной версии
предотвращает неожиданные изменения.const listA = document.getElementById('listA');
const listB = document.getElementById('listB');
Sortable.create(listA, {
group: 'shared',
animation: 200,
onAdd: (evt) => {
console.log('Элемент добавлен в список A', evt.item);
}
});
Sortable.create(listB, {
group: 'shared',
animation: 200,
onAdd: (evt) => {
console.log('Элемент добавлен в список B', evt.item);
}
});
Пример демонстрирует связанные списки, где элементы
могут перемещаться между listA и listB без
потери данных и с корректной обработкой событий. Такой подход
обеспечивает совместимость с существующей логикой приложения при
обновлении библиотеки.