SortableJS — это библиотека для реализации функционала drag-and-drop в веб-приложениях на JavaScript. Она позволяет создавать интерактивные списки и сетки с поддержкой сортировки элементов через перетаскивание. Управление поведением компонентов осуществляется через множество опций, каждая из которых задает определенный аспект работы.
group Опция group отвечает
за объединение нескольких списков в одну группу, позволяя переносить
элементы между ними. Она может быть строкой (имя группы) или объектом с
дополнительными свойствами:
name — имя группы.pull — возможность «выносить» элементы
из текущего списка. Может быть true, false или
"clone".put — возможность принимать элементы
из других списков. Может быть true, false или
массив с именами разрешенных групп.handle Селектор или функция,
указывающая, какой элемент внутри элемента списка можно использовать для
захвата. Позволяет ограничить область перетаскивания.
draggable CSS-селектор элементов,
которые могут быть перетаскиваемыми. Позволяет исключить из сортировки
отдельные элементы.
filter Селектор или функция для
элементов, которые не должны быть перетаскиваемыми. При попытке
перетаскивания таких элементов генерируется событие
onFilter.
sort Логическое значение, определяющее
возможность сортировки элементов внутри одного контейнера. Если
false, элементы можно только переносить между списками.
animation Время анимации в
миллисекундах при перестановке элементов. Позволяет задавать плавные
визуальные переходы.
ghostClass CSS-класс, который
применяется к клону элемента во время перетаскивания. Обычно
используется для стилизации «призрачного» элемента.
chosenClass CSS-класс, который
добавляется к элементу в момент начала перетаскивания. Позволяет
выделять активный элемент визуально.
dragClass CSS-класс, который
применяется к элементу во время перетаскивания, когда элемент уже
отделен от списка.
swapThreshold Порог пересечения для
перестановки элементов. Значение от 0 до 1, определяет, насколько
элемент должен пересечь другой для обмена позициями.
invertSwap Логическое значение,
влияющее на направление перестановки при использовании
swap. Если true, элементы меняются местами в
противоположном порядке.
SortableJS предоставляет набор событий, позволяющих контролировать процесс перетаскивания:
onStart — вызывается при начале
перетаскивания.onEnd — вызывается после завершения
перетаскивания, даже если элемент не был перемещен.onAdd — срабатывает, когда элемент
добавлен из другого списка.onUpdate — срабатывает, когда элемент
изменил позицию внутри списка.onRemove — вызывается при удалении
элемента из списка.onFilter — срабатывает при попытке
перетащить элемент, который соответствует фильтру.onMove — возвращает true
или false, разрешая или запрещая перемещение элемента в
конкретную позицию.disabled Отключает возможность
сортировки. Полезно для временной блокировки перетаскивания без удаления
обработчиков событий.
forceFallback Логическое значение,
заставляющее использовать fallback-метод Drag and Drop вместо нативного
HTML5 DnD. Рекомендуется для старых браузеров или специфичных
сценариев.
fallbackClass CSS-класс для элемента во
время использования fallback-перетаскивания. Позволяет отдельно
стилизовать элементы при fallback.
fallbackOnBody Логическое значение,
определяющее, будет ли элемент fallback добавляться в
<body> вместо родительского контейнера. Упрощает
работу с ограниченными контейнерами и overflow.
scroll Включает автоматическую
прокрутку контейнера или страницы при перетаскивании элемента к границе.
Значение true активирует стандартную прокрутку.
scrollSensitivity Расстояние в пикселях
до края контейнера, при котором начинается прокрутка.
scrollSpeed Скорость прокрутки при
перетаскивании элемента к границе контейнера.
Sortable.create(listA, {
group: { name: 'shared', pull: 'clone', put: false },
animation: 150,
sort: true
});
Sortable.create(listB, {
group: 'shared',
animation: 150,
sort: true
});
Sortable.create(list, {
handle: '.drag-handle',
draggable: '.item',
animation: 200
});
Sortable.create(list, {
filter: '.non-draggable',
onFilter: function (evt) {
console.log('Попытка перетащить заблокированный элемент', evt.item);
}
});
Эти опции позволяют гибко настраивать поведение списков и сеток в любых веб-интерфейсах, создавая удобные и отзывчивые пользовательские компоненты.