SortableJS предоставляет мощный и гибкий механизм работы с сортируемыми элементами через объект события. Каждое действие пользователя — перетаскивание, завершение перемещения, начало перетаскивания — сопровождается генерацией события с богатым набором свойств. Эти свойства позволяют детально контролировать поведение элементов и получать всю необходимую информацию о состоянии списка в момент взаимодействия.
Объект события содержит ключевые поля, которые повторяются в большинстве обработчиков:
item — DOM-элемент, который
перемещается. Содержит прямую ссылку на HTML-элемент, что позволяет
изменять его атрибуты или стили непосредственно в обработчике
события.from — контейнер, из которого был
извлечен элемент. Представляет собой родительский элемент, что полезно
при работе с несколькими списками.to — контейнер, в который элемент был
перемещён. Если работа ведется с одним списком, from и
to совпадают, но при подключении group и
drag-and-drop между списками они различаются.oldIndex — исходный индекс элемента до
перетаскивания. Позволяет отслеживать изменения порядка.newIndex — новый индекс элемента после
завершения перемещения. Используется для синхронизации данных, например,
в массиве объектов, соответствующем DOM-структуре.clone — клон элемента, создаваемый при
использовании опции pull: 'clone' в группах. Используется
для создания дубликатов элементов без удаления исходного.pullMode — строка, показывающая режим,
при котором элемент был извлечен: 'clone' или
'move'.Эти свойства образуют базу для всех операций, связанных с событиями, и дают возможность динамически управлять состоянием интерфейса.
1. onStart Срабатывает в момент начала
перетаскивания. Параметры объекта события позволяют определить:
item)from)Пример использования onStart:
new Sortable(list, {
onStart: function(evt) {
console.log('Начало перетаскивания:', evt.item);
evt.item.style.opacity = '0.5';
}
});
evt.item можно модифицировать сразу, изменяя визуальное
отображение во время drag.
2. onEnd Срабатывает после завершения
перемещения. Это ключевое событие для синхронизации данных. Основные
свойства объекта:
oldIndex и newIndex для пересчета порядка
элементов в массиве данных.from и to для определения перемещения
между списками.item и clone для работы с оригиналом и
клоном.Пример пересчета массива после сортировки:
onEnd: function(evt) {
const movedItem = dataArray.splice(evt.oldIndex, 1)[0];
dataArray.splice(evt.newIndex, 0, movedItem);
console.log('Обновленный порядок:', dataArray);
}
Такой подход гарантирует, что визуальный порядок элементов синхронизирован с внутренним состоянием приложения.
3. onAdd и onRemove
Используются при перемещении элементов между списками. Параметры объекта
события включают:
from — список источникаto — список назначенияitem — перемещаемый элементoldIndex и newIndex — позиции в исходном и
целевом спискахpullMode — режим извлечения элемента
('clone' или 'move')Пример логирования добавленного элемента в другой список:
onAdd: function(evt) {
console.log('Элемент добавлен в новый список:', evt.item);
console.log('Из списка:', evt.from);
console.log('На позицию:', evt.newIndex);
}
4. onUpdate Срабатывает при изменении
порядка внутри одного контейнера. Параметры:
oldIndex и newIndex — ключевые свойства
для перестановки элементов.item — элемент, который переместился.Позволяет обновлять локальные массивы или выполнять дополнительные действия, не затрагивая другие списки.
originalEvent — нативное событие мыши
или сенсорного устройства, вызвавшее перетаскивание. Полезно для работы
с координатами и модификаторами клавиш.pullMode используется только в случае
группы списков, особенно при режиме clone.clone присутствует только если клон
создается при drag-and-drop. В противном случае равен
undefined.to и from всегда
доступны, даже если элемент остается в том же списке, что облегчает
универсальную обработку событий.oldIndex и newIndex
при изменении данных. Не опираться на DOM-индексы без проверки, так как
они могут быть изменены CSS-свойствами.evt.to !== evt.from при работе с группами,
чтобы отличать перемещения внутри списка и между списками.clone внимательно обрабатывать
оригинал и клон, иначе можно случайно изменить не тот элемент.originalEvent предоставляет полный контроль над
поведением drag-and-drop, включая отмену события или модификацию
курсора.Этот набор свойств и событий формирует основу для любой сложной реализации Drag-and-Drop с SortableJS. Владение ими позволяет полностью контролировать процесс сортировки и интегрировать изменения с внутренней логикой приложения.