Библиотека Shopify Draggable предоставляет мощный API для создания интерактивных перетаскиваемых элементов на странице. Помимо создания экземпляров объектов для конкретных контейнеров, библиотека включает ряд статических методов, которые позволяют управлять поведением элементов и расширять функциональность без необходимости создавать новый объект Draggable.
Draggable.create()Статический метод Draggable.create() используется для
быстрого создания экземпляра Draggable на одном или нескольких
контейнерах. Синтаксис:
Draggable.create(containers, options);
containers — CSS-селектор, DOM-элемент или массив элементов, к которым нужно применить Draggable.
options — объект с настройками:
draggable — селектор перетаскиваемых элементов внутри
контейнера.handle — селектор области, по которой разрешено
перетаскивание.mirror — логика создания зеркала перетаскиваемого
элемента.delay — задержка перед началом перетаскивания.Пример использования:
Draggable.create('.list', {
draggable: '.item',
handle: '.handle',
mirror: {
constrainDimensions: true
}
});
Здесь метод сразу создаёт Draggable для всех контейнеров с классом
.list, позволяя перетаскивать элементы .item
только через область .handle.
Draggable.isDraggingСтатическое свойство Draggable.isDragging возвращает
булево значение, показывающее, выполняется ли в данный момент
перетаскивание любого элемента на странице.
if (Draggable.isDragging) {
console.log('Процесс перетаскивания активен');
}
Это полезно для контроля поведения интерфейса при активном перетаскивании, например, отключения кликов по кнопкам или навигации.
Draggable.utilsОбъект Draggable.utils содержит набор
утилитарных функций, которые часто используются при
работе с перетаскиванием:
Draggable.utils.closest(element, selector) — возвращает
ближайший родительский элемент, соответствующий селектору.Draggable.utils.clone(target) — клонирует DOM-элемент
для создания зеркала.Draggable.utils.isTouchEvent(event) — проверяет,
является ли событие сенсорным.Draggable.utils.cancelEvent(event) — предотвращает
стандартное поведение браузера.Пример:
const parent = Draggable.utils.closest(clickedElement, '.container');
const clone = Draggable.utils.clone(parent);
Эти утилиты позволяют управлять DOM и событиями без необходимости писать вспомогательные функции вручную.
Draggable.snapСтатический метод Draggable.snap используется для
привязки позиции перетаскиваемого элемента к определённой сетке или
значениям. Он возвращает функцию, которая применяется к координатам
элемента при событии drag:move.
Draggable.snap(value, grid);
Пример использования:
const snapToGrid = Draggable.snap(0, 50);
Draggable.create('.grid-item', {
draggable: '.item',
onDragMove({mirror}) {
mirror.style.transform = `translate(${snapToGrid(mirror.offsetLeft)}px, ${snapToGrid(mirror.offsetTop)}px)`;
}
});
В результате элемент будет “прилипать” к сетке с шагом 50 пикселей.
Draggable.get()Метод Draggable.get(element) позволяет получить
существующий экземпляр Draggable, связанный с указанным контейнером.
Возвращает объект Draggable или null, если экземпляр не
найден.
const draggableInstance = Draggable.get(document.querySelector('.list'));
draggableInstance.on('drag:start', event => {
console.log('Перетаскивание началось');
});
Это особенно полезно, когда требуется динамически изменить параметры или добавить обработчики событий уже после создания экземпляра.
Draggable.destroyAll()Статический метод Draggable.destroyAll() удаляет все
существующие экземпляры Draggable с страницы, освобождая ресурсы и
отключая все обработчики событий.
Draggable.destroyAll();
Используется для динамических интерфейсов, где элементы и контейнеры создаются и уничтожаются на лету, предотвращая утечки памяти и конфликт обработчиков.
Draggable.create() — создание новых экземпляров без
явного new.Draggable.isDragging — глобальная проверка активности
перетаскивания.Draggable.utils — набор вспомогательных функций для
работы с DOM и событиями.Draggable.snap() — привязка координат к сетке или
определённым значениям.Draggable.get() — получение существующего экземпляра по
контейнеру.Draggable.destroyAll() — удаление всех Draggable с
страницы.Статические методы дают возможность глобально управлять поведением перетаскивания, работать с множеством контейнеров и динамически расширять функционал без создания отдельных экземпляров для каждого элемента. Они являются ядром эффективной и масштабируемой архитектуры интерфейсов на Shopify Draggable.