Shopify Draggable — это библиотека на JavaScript,
предназначенная для реализации функциональности перетаскивания элементов
на веб-странице. Она обеспечивает гибкий API для создания drag-and-drop
интерфейсов без необходимости работы с низкоуровневым
mousedown, mousemove и mouseup.
Основная цель библиотеки — сделать взаимодействие с DOM-интерфейсом
интуитивным и расширяемым.
Ключевые особенности:
Основной класс библиотеки. Создание нового экземпляра выглядит так:
import { Draggable } from '@shopify/draggable';
const draggable = new Draggable(document.querySelectorAll('.draggable-item'), {
draggable: '.item',
delay: 0,
mirror: {
constrainDimensions: true
}
});
Draggable поддерживает плагины, расширяющие базовую функциональность:
Пример подключения плагина Sortable:
import { Sortable } from '@shopify/draggable';
const sortable = new Sortable(document.querySelectorAll('.sortable-container'), {
draggable: '.sortable-item',
delay: 100
});
Draggable предоставляет богатый набор событий:
drag:start — инициируется при начале
перетаскивания.drag:move — вызывается при каждом
движении перетаскиваемого элемента.drag:stop — срабатывает по завершении
перетаскивания.sortable:sort — используется в
Sortable, уведомляет о завершении сортировки.droppable:over /
droppable:out — события для Droppable при
наведении на целевую область и выходе из неё.Пример обработки события:
draggable.on('drag:start', (event) => {
console.log('Начало перетаскивания:', event.data.source);
});
sortable.on('sortable:sort', (event) => {
console.log('Элемент отсортирован:', event.data.dragEvent.source);
});
Каждое событие содержит объект data, который
предоставляет доступ к:
Зеркальный элемент (mirror) используется для
визуализации перетаскивания, не влияя на исходный DOM-элемент.
Настройки:
Пример:
const draggable = new Draggable('.draggable', {
draggable: '.item',
mirror: {
constrainDimensions: true,
appendTo: 'body'
}
});
Использование Sortable позволяет создавать динамически изменяемые списки. Важные методы и свойства:
Пример:
sortable.on('sortable:sorted', (event) => {
const newOrder = Array.from(event.data.container.children).map(el => el.dataset.id);
console.log('Новый порядок элементов:', newOrder);
});
destroy().Shopify Draggable сочетает простоту базового API с гибкостью событий и плагинов, что позволяет создавать сложные drag-and-drop интерфейсы с минимальным количеством кода.