SortableJS — это мощная библиотека для реализации перетаскивания элементов в веб-приложениях. Один из её продвинутых модулей — MultiDrag, позволяющий пользователю выбирать несколько элементов и перемещать их одновременно. MultiDrag особенно полезен в интерфейсах с таблицами, списками задач, галереями изображений и другими компонентами, где требуется массовое редактирование порядка элементов.
Для использования MultiDrag необходимо подключить саму библиотеку SortableJS и активировать соответствующую опцию:
import Sortable from 'sortablejs';
import 'sortablejs/modular/sortable.core.esm.js';
import MultiDrag from 'sortablejs/plugins/MultiDrag';
Sortable.mount(new MultiDrag());
const list = document.getElementById('sortable-list');
const sortable = new Sortable(list, {
multiDrag: true, // Включение MultiDrag
selectedClass: 'selected', // Класс для выделенных элементов
fallbackTolerance: 5, // Минимальное смещение для начала перетаскивания
});
Ключевые параметры MultiDrag:
multiDrag — активация возможности множественного
выбора.selectedClass — CSS-класс, который будет присваиваться
выделенным элементам.fallbackTolerance — чувствительность к движению мыши
для начала перетаскивания.Выделение нескольких элементов происходит с помощью стандартных методов управления:
С помощью этих методов можно создавать сложные комбинации выбора и управлять группой элементов одновременно.
Когда выделено несколько элементов, перетаскивание одного из них перемещает всю выбранную группу. Поведение можно настроить через следующие параметры:
multiDragKey — задаёт модификатор для множественного
выбора. По умолчанию это клавиша Ctrl или
Cmd.forceFallback — если установлен в true,
используется эмуляция перетаскивания, что позволяет избежать проблем с
нативным Drag and Drop в некоторых браузерах.invertSwap — если true, элементы группы
вставляются в обратном порядке относительно исходного положения.Пример настройки с дополнительными опциями:
const sortable = new Sortable(list, {
multiDrag: true,
selectedClass: 'selected',
multiDragKey: 'Shift',
forceFallback: true,
invertSwap: true
});
SortableJS предоставляет ряд событий, которые позволяют отслеживать действия пользователя при работе с множественным выбором:
select — вызывается при выделении элемента.deselect — вызывается при снятии выделения с
элемента.dragStart — срабатывает при начале перетаскивания
выбранной группы.dragEnd — завершение перетаскивания, после которого
можно обработать новое расположение элементов.sort — изменение порядка элементов в контейнере.Пример использования события select:
sortable.option("onSelect", function (evt) {
console.log("Элемент выбран:", evt.item);
});
Для визуальной обратной связи важно использовать класс
selected. Можно задавать различные стили:
.selected {
background-color: #d0eaff;
border: 1px solid #3399ff;
}
Также можно комбинировать классы для разных состояний, например, при наведении или при перетаскивании.
MultiDrag хорошо сочетается с такими функциями, как swap, animation, filter и handle. Это позволяет создавать гибкие интерфейсы, где одновременно реализованы:
handle.Пример интеграции с анимацией и фильтрацией:
const sortable = new Sortable(list, {
multiDrag: true,
selectedClass: 'selected',
animation: 200,
filter: '.no-drag',
handle: '.drag-handle'
});
multiDragKey в зависимости от платформы
(например, Ctrl для Windows и Cmd для macOS),
чтобы поведение было привычным.MultiDrag расширяет стандартный функционал SortableJS и позволяет создавать интерфейсы с мощной системой выбора и перемещения нескольких элементов, значительно повышая удобство работы с интерактивными списками и коллекциями.