Метод drake.on() является ключевым механизмом подписки
на события в библиотеке Dragula. Он позволяет отслеживать различные
действия пользователя с перетаскиваемыми элементами и реагировать на них
программно. drake — это объект, возвращаемый функцией
dragula(), который инкапсулирует всю логику
перетаскивания.
drake.on(event, callback)
Dragula поддерживает несколько ключевых событий, на которые можно
подписываться через drake.on():
drag Срабатывает в момент начала
перетаскивания элемента. Аргументы callback:
function(el, source) { }
el — перетаскиваемый элемент.source — контейнер, из которого был взят элемент.dragend Срабатывает при завершении
перетаскивания, независимо от того, был ли элемент перемещён.
Аргументы callback:
function(el) { }
el — элемент, на котором завершилось
перетаскивание.drop Срабатывает при успешном
отпускании элемента в контейнере назначения. Аргументы
callback:
function(el, target, source, sibling) { }
el — перемещаемый элемент.target — контейнер, в который элемент помещён.source — контейнер, из которого элемент был взят.sibling — элемент, перед которым был вставлен
el, если есть; null, если добавлен в
конец.cancel Вызывается, если
перетаскивание было отменено или элемент возвращён в исходное место.
Аргументы callback:
function(el, container, source) { }
el — элемент, возвращённый на место.container — текущий контейнер (где элемент
оказался).source — исходный контейнер.over / out Срабатывают
при наведении перетаскиваемого элемента на контейнер (over)
и при выходе за его пределы (out). Аргументы
callback:
function(el, container) { }
el — перетаскиваемый элемент.container — контейнер, над которым элемент находится
или покинул его.shadow Создаёт тень
перетаскиваемого элемента, когда он перемещается над контейнером.
Аргументы callback:
function(el, container, source) { }const drake = dragula([document.getElementById('left'), document.getElementById('right')]);
// Подписка на начало перетаскивания
drake.on('drag', function(el, source) {
el.style.opacity = '0.5';
console.log('Начало перетаскивания:', el, 'Источник:', source);
});
// Подписка на успешный drop
drake.on('drop', function(el, target, source, sibling) {
el.style.opacity = '';
console.log('Элемент перемещён:', el, 'Цель:', target, 'Исходник:', source, 'Перед элементом:', sibling);
});
// Подписка на отмену перетаскивания
drake.on('cancel', function(el, container, source) {
el.style.backgroundColor = '';
console.log('Перетаскивание отменено для элемента:', el);
});
drake.off(event, callback). Важно
передавать ту же функцию callback, что была при
on().this: Внутри callback
this указывает на объект drake. Это удобно для
вызова других методов библиотеки без создания внешних ссылок.drag и drop, чтобы
избежать лагов при визуальном перетаскивании.requestAnimationFrame внутри событий позволяет плавно
анимировать элементы при перемещении или при возврате в исходное
положение.drag и drop легко реализовать логику
ограничения перемещения, например, запрет на перемещение определённых
элементов в конкретные контейнеры.Метод drake.on() является основой взаимодействия с
Dragula и обеспечивает полное управление жизненным циклом
перетаскивания, делая библиотеку гибкой для различных сценариев
веб-разработки.