Библиотека Shopify Draggable построена вокруг модульной архитектуры, где базовый функционал перетаскивания можно расширять с помощью плагинов. Плагины позволяют добавлять такие возможности, как сортировка элементов, создание зеркал, анимация при перемещении и взаимодействие с другими элементами на странице.
Для подключения плагинов сначала необходимо убедиться, что библиотека Draggable подключена на страницу. Обычно это делается через npm или CDN:
import { Draggable, Plugins } from '@shopify/draggable';
После этого можно создавать экземпляр Draggable с указанием контейнера элементов и включением нужных плагинов.
const draggable = new Draggable(document.querySelectorAll('.items'), {
draggable: '.item',
plugins: [Plugins.Sortable, Plugins.ResizeMirror]
});
Ключевые моменты:
plugins — массив, содержащий классы плагинов, которые
нужно активировать.Sortable
const sortableDraggable = new Draggable(document.querySelectorAll('.list'), {
draggable: '.list-item',
plugins: [Plugins.Sortable]
});Mirror
const mirrorDraggable = new Draggable(document.querySelectorAll('.cards'), {
draggable: '.card',
plugins: [Plugins.Mirror],
mirror: {
constrainDimensions: true,
xAxis: true,
yAxis: true
}
});ResizeMirror
SwapAnimation
const animatedDraggable = new Draggable(document.querySelectorAll('.grid'), {
draggable: '.grid-item',
plugins: [Plugins.Sortable, Plugins.SwapAnimation]
});Каждый плагин имеет собственные опции, которые задаются при инициализации Draggable:
Mirror
mirror.appendTo: контейнер, в который будет добавлено
зеркало (document.body по умолчанию).mirror.constrainDimensions: сохранять размеры
оригинала.mirror.xAxis / mirror.yAxis: разрешение
движения по осям.Sortable
sortable.swapAnimation: включение/отключение
анимации.sortable.draggableClass: класс, который будет
применяться к активному элементу.SwapAnimation
duration: длительность анимации в миллисекундах.easingFunction: функция сглаживания движения.Библиотека поддерживает одновременное использование нескольких плагинов. Это позволяет, например, создавать интерактивные списки с сортировкой, зеркалами и плавной анимацией одновременно.
const complexDraggable = new Draggable(document.querySelectorAll('.complex-list'), {
draggable: '.complex-item',
plugins: [Plugins.Sortable, Plugins.Mirror, Plugins.SwapAnimation],
mirror: {
constrainDimensions: true
},
swapAnimation: {
duration: 200,
easingFunction: 'ease-in-out'
}
});
Особенности работы нескольких плагинов:
Draggable позволяет создавать собственные плагины, расширяя базовые события:
class MyPlugin {
constructor(draggable) {
this.draggable = draggable;
}
attach() {
this.draggable.on('drag:start', this.onDragStart.bind(this));
}
onDragStart(event) {
console.log('Начало перетаскивания:', event);
}
}
const customDraggable = new Draggable(document.querySelectorAll('.custom-list'), {
draggable: '.custom-item',
plugins: [MyPlugin]
});
Важно:
attach() вызывается автоматически при
инициализации.drag:start, drag:move,
drag:stop) и изменять поведение элементов.Для проектов без сборщика модулей плагины можно подключить через CDN:
<script src="https://cdn.jsdelivr.net/npm/@shopify/draggable@1.0.0-beta.8/lib/draggable.bundle.js"></script>
<script>
const draggable = new Draggable(document.querySelectorAll('.items'), {
draggable: '.item',
plugins: [Draggable.Plugins.Sortable, Draggable.Plugins.Mirror]
});
</script>
Draggable.Plugins.Подключение плагинов в Shopify Draggable предоставляет гибкий инструмент для создания интерактивных интерфейсов с минимальными усилиями и высокой степенью кастомизации.