Событие drag:start является ключевым в процессе работы с
библиотекой Shopify Draggable. Оно срабатывает в
момент, когда пользователь начинает перемещать элемент, и предоставляет
доступ к широкому набору данных, необходимых для управления поведением
drag-and-drop.
CustomEventОбъект события drag:start включает несколько ключевых
свойств:
source – DOM-элемент, который пользователь начал перемещать.
event.source // <div class="draggable-item">...</div>sourceContainer – контейнер, из которого элемент был взят.
event.sourceContainer // <ul class="draggable-list">...</ul>originalEvent – исходное DOM-событие мыши или
сенсорного устройства. Позволяет получать координаты, тип события
(mousedown, touchstart) и другие свойства
взаимодействия.
event.originalEvent.clientX
event.originalEvent.clientYsensorEvent – объект, предоставляемый сенсорной системой Draggable, содержащий детали текущего drag-состояния. Включает:
position – текущие координаты перетаскиваемого
элементаdelta – смещение относительно исходной позицииsource – тот же элемент, что и в
event.sourcedragEvent – экземпляр события библиотеки, позволяющий контролировать дальнейшие действия, например отменить drag или изменить класс элемента.
drag:startimport { Draggable } from '@shopify/draggable';
const container = document.querySelector('.draggable-list');
const draggable = new Draggable(container, {
draggable: '.draggable-item'
});
draggable.on('drag:start', (event) => {
console.log('Начало перетаскивания элемента:', event.source);
console.log('Исходный контейнер:', event.sourceContainer);
console.log('Координаты мыши:', event.originalEvent.clientX, event.originalEvent.clientY);
// Добавление визуального эффекта начала drag
event.source.classList.add('is-dragging');
});
В этом примере видно, как можно получить доступ к элементу и контейнеру, а также визуально отметить начало процесса перетаскивания.
source и sourceContainer всегда возвращают актуальные DOM-элементы, что позволяет манипулировать их стилями или содержимым сразу при начале drag.
originalEvent полезно использовать для создания кастомных координатных логик или ограничения перемещения по определённой оси.
sensorEvent.position обновляется динамически по
мере движения мыши, но на этапе drag:start содержит
начальные координаты, что важно для расчёта смещения элементов.
Отслеживание drag:start удобно для:
opacity,
transform)drag:move, drag:stop)drag:start, чтобы не замедлять отклик интерфейса.requestAnimationFrame, чтобы избежать мерцаний.event.source.dataset для передачи
метаданных элемента, которые понадобятся на следующих этапах
drag-and-drop.Событие drag:start можно комбинировать с другими
событиями Draggable, такими как drag:move и
drag:stop, создавая цепочку реакций. Это позволяет,
например:
sourceContainer.Пример создания placeholder на drag:start:
draggable.on('drag:start', (event) => {
const placeholder = document.createElement('div');
placeholder.className = 'placeholder';
event.sourceContainer.insertBefore(placeholder, event.source.nextSibling);
});
Событие drag:start является отправной точкой любой
drag-сессии в Shopify Draggable. Оно предоставляет
полный контроль над исходным элементом, его контейнером, координатами и
метаданными, что позволяет строить как простые, так и сложные
интерактивные интерфейсы с drag-and-drop.
Правильное использование данных drag:start обеспечивает
плавность, предсказуемость и точность поведения перетаскивания
элементов, создавая основу для всех последующих событий в цепочке
drag-and-drop.