onSpill — это один из событийных колбэков библиотеки
SortableJS, предназначенный для управления поведением элементов при
попытке перетаскивания за пределы контейнера. Его основная задача —
отслеживать случаи, когда элемент был «выпущен» вне разрешённой области
сортировки.
Событие onSpill срабатывает только тогда, когда
элемент был перемещён и отпущен вне любого контейнера Sortable,
к которому он привязан. В стандартном поведении SortableJS, если элемент
перетащить за пределы контейнера и отпустить, он возвращается на
своё исходное место. onSpill предоставляет
возможность изменить это поведение: например, удалить элемент, отправить
его в другой список или выполнить произвольное действие.
Ключевые моменты:
onSpill: function (evt) {
// evt — объект события
}
Объект события evt содержит следующие важные
свойства:
evt.item — DOM-элемент, который был перетащен.evt.from — исходный контейнер, из которого элемент был
взят.evt.clone — клон элемента, если используется опция
pull: 'clone'.evt.oldIndex — индекс элемента в исходном контейнере до
перемещения.onSpillПростейший пример обработки события onSpill:
const sortable = new Sortable(document.getElementById('list'), {
onSpill: function (evt) {
// Удаление элемента при выпадении за пределы контейнера
evt.item.parentNode.removeChild(evt.item);
}
});
В этом примере элемент, который был перетащен за пределы контейнера, удаляется из DOM, вместо того чтобы возвращаться на исходное место.
Удаление элементов В интерфейсах, где
пользователь может удалять задачи или карточки, onSpill
позволяет реализовать механизм «перетащи и выбрось».
Перенос элементов в другие области Если
интерфейс имеет несколько контейнеров, а пользователь отпустил элемент в
пустом месте, событие onSpill может использоваться для
переноса элемента в «резервный» контейнер.
Анимации и визуальные эффекты Можно запускать анимации или подсказки при неправильном размещении элемента, делая интерфейс более наглядным и отзывчивым.
onSpill тесно связан с событиями:
onEnd — срабатывает всегда после завершения
перетаскивания. Если элемент был выброшен за пределы,
onSpill срабатывает перед
onEnd.onRemove — срабатывает, когда элемент перемещён в
другой контейнер. Если элемент не попал в контейнер,
onRemove не срабатывает.onMove — срабатывает при движении элемента. Можно
использовать вместе с onSpill для контроля допустимых зон
перемещения.onSpill только в сценариях, когда
необходимо кастомное поведение для «неправильного» перемещения.onSpill.evt.from, чтобы понимать, из какого списка был взят
элемент.pull: 'clone',
evt.clone содержит копию элемента, и её можно обработать
отдельно.const mainList = document.getElementById('main');
const backupList = document.getElementById('backup');
new Sortable(mainList, {
onSpill: function (evt) {
// Перемещение элемента в резервный контейнер
backupList.appendChild(evt.item);
}
});
В этом примере элемент не удаляется, а перемещается в другой контейнер, что позволяет сохранять его данные и предотвращать потерю информации.
По умолчанию, SortableJS возвращает элемент на исходную позицию. Чтобы изменить это:
new Sortable(mainList, {
revertOnSpill: true // элемент вернется на исходное место
});
Если revertOnSpill установлен в false,
необходимо самостоятельно обрабатывать элемент в onSpill,
иначе он останется в DOM в последнем положении.
onSpill — мощный инструмент для тонкой настройки UX при
перетаскивании элементов, особенно когда требуется управление
элементами, оказавшимися вне ожидаемой области контейнера.