Экземпляр Draggable создается с помощью конструктора
библиотеки Shopify Draggable и управляет набором элементов, которые
становятся перетаскиваемыми. Основной синтаксис выглядит следующим
образом:
import { Draggable } from '@shopify/draggable';
const draggable = new Draggable(document.querySelectorAll('.draggable-item'), {
draggable: '.draggable-item',
delay: 0,
mirror: {
constrainDimensions: true,
xAxis: true,
yAxis: true
}
});
Здесь первый аргумент конструктора указывает на элементы-контейнеры
или коллекцию элементов, внутри которых будут находиться перетаскиваемые
объекты. Параметр draggable определяет CSS-селектор самих
элементов, которые можно перемещать.
Экземпляр Draggable предоставляет набор
свойств, которые позволяют управлять поведением перетаскивания
и получать информацию о состоянии элементов.
containers Массив DOM-элементов,
которые были переданы конструктору. Используется для определения
областей, внутри которых работают перетаскиваемые элементы.
console.log(draggable.containers); // [div.draggable-container]draggables Список всех элементов,
которые на текущий момент зарегистрированы как перетаскиваемые.
Позволяет динамически проверять или модифицировать набор объектов.
draggable.draggables.forEach(item => console.log(item));options Объект с конфигурацией
текущего экземпляра. Содержит все настройки, переданные при создании,
включая draggable, delay, mirror,
handle, ignore.
console.log(draggable.options.mirror.constrainDimensions); // trueisDragging Булево свойство,
показывающее, активен ли в данный момент процесс перетаскивания.
if (draggable.isDragging) {
console.log('Элемент сейчас перетаскивается');
}activeDraggable Содержит ссылку на
элемент, который в данный момент перемещается. Если перетаскивания нет,
свойство равно null.
console.log(draggable.activeDraggable); // HTMLElement или nullmirror Объект, представляющий клон
элемента, который визуально следует за курсором во время перетаскивания.
Свойства включают:
element — DOM-элемент зеркала;translate — объект с координатами
{ x, y };style — доступ к стилям зеркала.console.log(draggable.mirror.translate.x);С помощью этих свойств можно создавать адаптивные интерфейсы, которые реагируют на действия пользователя. Например, динамическое включение и отключение перетаскивания:
draggable.options.delay = 100; // добавление задержки перед началом перетаскивания
draggable.draggables.forEach(item => {
item.style.cursor = 'grab';
});
Или проверка состояния перетаскивания перед выполнением действий:
if (draggable.isDragging && draggable.activeDraggable) {
draggable.activeDraggable.style.opacity = '0.5';
}
Свойство mirror позволяет управлять визуальными
эффектами:
draggable.on('drag:start', (event) => {
draggable.mirror.element.style.backgroundColor = 'rgba(0,0,0,0.1)';
});
containers и draggables
можно использовать для регистрации событий на отдельные элементы.activeDraggable позволяет определить
источник события drag:move.mirror можно модифицировать
динамически для создания кастомных эффектов перемещения.Эти свойства делают Draggable не просто инструментом для
перетаскивания, а полноценной системой управления интерактивными
элементами DOM с возможностью гибкой настройки поведения каждого
объекта.