SortableJS — мощная библиотека для создания интерактивных списков с поддержкой перетаскивания элементов. Для расширения её функциональности используются плагины. Плагины позволяют добавлять новые возможности без модификации исходного кода библиотеки, упрощая поддержку и масштабирование проекта.
Плагины в SortableJS подключаются аналогично обычным модулям JavaScript. Возможны следующие способы:
Через npm или Yarn Установка осуществляется стандартным пакетом:
npm install sortablejs
После чего плагины импортируются в проект:
import Sortable from 'sortablejs';
import AutoScroll from 'sortablejs/plugins/AutoScroll';
import Swap from 'sortablejs/plugins/Swap';
Плагины регистрируются при инициализации:
const sortable = new Sortable(listElement, {
plugins: [AutoScroll, Swap]
});Через CDN Для проектов без сборщика модулей можно использовать подключение через CDN:
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.16.0/Sortable.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.16.0/plugins/AutoScroll/AutoScroll.min.js"></script>
После подключения плагины регистрируются через глобальные объекты:
const sortable = new Sortable(listElement, {
plugins: [Sortable.AutoScroll]
});1. AutoScroll Плагин обеспечивает автоматическую прокрутку контейнера при перетаскивании элементов за пределы видимой области. Ключевые опции:
scroll — элемент-контейнер для скролла (по умолчанию
window).scrollSensitivity — расстояние до края контейнера, при
котором начинается прокрутка.scrollSpeed — скорость прокрутки в пикселях за
кадр.Пример использования:
const sortable = new Sortable(listElement, {
plugins: [Sortable.AutoScroll],
autoScroll: true,
scrollSensitivity: 50,
scrollSpeed: 10
});
2. Swap Позволяет мгновенно обменивать элементы местами при перетаскивании, вместо обычного сдвига. Полезно для сеток и интерактивных интерфейсов.
Основные настройки:
swapClass — CSS-класс для визуального выделения
элемента во время перетаскивания.swapThreshold — процент пересечения элемента для
активации обмена (0–1).Пример:
const sortable = new Sortable(gridElement, {
plugins: [Sortable.Swap],
swapThreshold: 0.65,
swapClass: 'highlight-swap'
});
3. MultiDrag Позволяет выделять несколько элементов и перемещать их группой. Основные опции:
selectedClass — класс выделенных элементов.multiDragKey — клавиша-модификатор для множественного
выделения (например, Shift или Ctrl).Пример:
const sortable = new Sortable(listElement, {
plugins: [Sortable.MultiDrag],
multiDrag: true,
selectedClass: 'selected',
multiDragKey: 'Shift'
});
Совместимость плагинов Некоторые плагины могут конфликтовать при одновременном использовании. Например, Swap и MultiDrag требуют аккуратного тестирования, чтобы избежать ошибок при перетаскивании группы элементов.
Настройка CSS для визуализации Большинство плагинов используют классы для выделения элементов. Для корректного отображения рекомендуется заранее подготовить стили:
.highlight-swap {
border: 2px dashed #007bff;
}
.selected {
background-color: rgba(0, 123, 255, 0.2);
}
SortableJS позволяет создавать пользовательские плагины. Структура
плагина включает методы start, end,
update и др., которые вызываются во время взаимодействия с
элементами.
Пример простого плагина, добавляющего класс к элементу при начале перетаскивания:
const CustomHighlightPlugin = {
start(evt) {
evt.item.classList.add('dragging');
},
end(evt) {
evt.item.classList.remove('dragging');
}
};
const sortable = new Sortable(listElement, {
plugins: [CustomHighlightPlugin]
});
SortableJS поддерживает массив плагинов в опции plugins.
Они применяются в порядке перечисления. Важно учитывать, что конфликты
между плагинами решаются на уровне их настроек:
const sortable = new Sortable(listElement, {
plugins: [Sortable.MultiDrag, Sortable.Swap, Sortable.AutoScroll],
multiDrag: true,
swapThreshold: 0.65,
autoScroll: true
});
plugins при инициализации
Sortable.