SortableJS — это мощная библиотека для реализации перетаскивания элементов в списках и сетках на веб-странице. Одной из ключевых возможностей является управление поведением при перемещении элементов, включая режим fallback, который обеспечивает стабильность работы на устройствах и браузерах, где нативное перетаскивание может не поддерживаться или работать некорректно.
Режим fallback в SortableJS используется, когда стандартный механизм HTML5 Drag and Drop либо недоступен, либо не удовлетворяет требованиям проекта. В таких случаях библиотека переключается на использование альтернативных методов обработки событий мыши и касаний для имитации перетаскивания.
Ключевые моменты:
onStart, onEnd, onMove,
остаются активными, что позволяет одинаково обрабатывать перемещения
независимо от метода.Для включения режима fallback используется опция
forceFallback. При установке в true библиотека
принудительно отключает нативный Drag and Drop и использует внутреннюю
реализацию.
new Sortable(document.getElementById('list'), {
animation: 150,
forceFallback: true,
fallbackClass: 'sortable-fallback',
fallbackOnBody: true
});
Описание параметров:
true, элемент
для перемещения добавляется в <body>, что
предотвращает обрезку и проблемы с overflow родительских
контейнеров.При включенном fallback создаётся виртуальный переносимый элемент, который следует за курсором или пальцем пользователя. Оригинальный элемент остаётся на месте до завершения перемещения. Это позволяет корректно обновлять DOM только после завершения операции, минимизируя визуальные «скачки».
Особенности работы:
position: fixed или
absolute и добавляет к нему
fallbackClass.onStart срабатывает при
начале drag, onEnd — при завершении. onMove
может использоваться для динамической проверки, разрешено ли перемещение
на текущую позицию.Стилизация fallback-элемента играет важную роль для пользовательского опыта. Рекомендуется:
.sortable-fallback {
opacity: 0.8;
background-color: #f0f0f0;
box-shadow: 0 4px 10px rgba(0,0,0,0.2);
cursor: grabbing;
}
forceFallback на мобильных устройствах или
при обнаружении багов нативного Drag and Drop.fallbackClass для контроля
визуального вида временного элемента.fallbackOnBody, чтобы избежать обрезки
draggable-элемента.onStart, onMove и
onEnd позволяют реализовать дополнительную логику,
например, динамическое выделение целевого контейнера или проверку
условий перемещения.new Sortable(document.getElementById('list1'), {
group: 'shared',
animation: 200,
forceFallback: true
});
new Sortable(document.getElementById('list2'), {
group: 'shared',
animation: 200,
forceFallback: true
});
shared позволяет перемещать
элементы между списками.onMove: function (evt) {
return !evt.related.classList.contains('no-drop');
}
Режим fallback в SortableJS обеспечивает универсальность и
надёжность перетаскивания элементов на любых устройствах.
Грамотная настройка опций forceFallback,
fallbackClass и fallbackOnBody позволяет
создать плавный и предсказуемый интерфейс, полностью контролируемый
через события библиотеки и CSS.