Shopify Draggable — это современная библиотека для реализации перетаскивания элементов в интерфейсе, основанная на чистом JavaScript. Несмотря на активное развитие, некоторые функции и подходы в библиотеке признаны устаревшими (deprecated) и больше не рекомендуются к использованию. Их использование может привести к проблемам совместимости с будущими версиями и к снижению производительности.
SortableВ ранних версиях Draggable существовал встроенный модуль
Sortable, предназначенный для упорядочивания списков
элементов через drag-and-drop. Он позволял автоматически переставлять
элементы DOM при перетаскивании. С версии 1.0.0 использование
Sortable было признано устаревшим по следующим
причинам:
Swappable и
Collidable.Рекомендуется использовать комбинацию Draggable +
Plugins (Swappable,
SortablePlugin из внешних библиотек) для реализации
динамического упорядочивания элементов, вместо устаревшего встроенного
Sortable.
import { Draggable } from '@shopify/draggable';
const container = document.querySelector('.list');
const draggable = new Draggable(container, {
draggable: '.item'
});
// Вместо Sortable лучше использовать Swappable
import { Swappable } from '@shopify/draggable';
const swappable = new Swappable(container, {
draggable: '.item'
});
Mirror и
устаревшие методы управленияКомпонент Mirror, создающий визуальную копию перетаскиваемого элемента, подвергался значительным изменениям. В старых версиях Draggable использовались методы:
mirror.create()mirror.update()mirror.destroy()Эти методы теперь считаются устаревшими. Прямое управление
Mirror вручную не рекомендуется, так как библиотека
автоматически обрабатывает создание и удаление зеркала через события
drag:start, drag:move и
drag:stop.
// Не рекомендуется:
draggable.mirror.create(element);
// Рекомендуется использовать события:
draggable.on('drag:start', (evt) => {
console.log('Перетаскивание началось', evt);
});
drag:over и drag:out устаревшего
поведенияРанее события drag:over и drag:out активно
использовались для обработки пересечения элементов. В текущих версиях их
поддержка ограничена и они заменены более универсальными событиями:
collidable:overcollidable:outЭти события предоставляют расширенные возможности, такие как
определение точной позиции пересечения и доступ к API
Collidable плагина.
import { Collidable } from '@shopify/draggable';
const collidable = new Collidable(container, {
draggable: '.item',
droppable: '.dropzone'
});
collidable.on('collidable:over', (evt) => {
console.log('Элемент над зоной', evt.over);
});
Некоторые опции Draggable признаны deprecated:
delay — задержка начала drag в старой реализации.
Сейчас рекомендуется использовать событие drag:start и
кастомную логику таймера.distance — минимальное расстояние перемещения до старта
drag. Поддержка ограничена и может быть удалена в будущих версиях.// Старый способ
const draggable = new Draggable(container, {
draggable: '.item',
delay: 100,
distance: 5
});
// Новый способ через событие drag:start
draggable.on('drag:start', (evt) => {
setTimeout(() => {
console.log('Начало перетаскивания после задержки');
}, 100);
});
Некоторые встроенные плагины больше не поддерживаются:
Swappable.deprecated.Swappable,
Collidable) вместо устаревших встроенных решений.Mirror, использовать
события drag для кастомной логики.drag:over и
drag:out через Collidable.delay и distance на современные механизмы
событий.Эти шаги обеспечивают совместимость с актуальной версией Draggable и сохраняют производительность интерфейсов с drag-and-drop.