Dragula — это легковесная библиотека для реализации перетаскивания
элементов (drag-and-drop) в браузере. Центральным объектом является
drake, который создаётся с помощью функции
dragula(). Этот объект обеспечивает управление событиями
перетаскивания, такими как drag, drop,
over, out и другими. Управление этими
событиями критически важно для корректной работы интерфейсов с
динамическим содержимым. Метод drake.off() используется для
отписки от событий, что позволяет освобождать ресурсы и
предотвращать нежелательные побочные эффекты.
drake.off()Метод имеет несколько форм использования:
drake.off(event, callback)
drake.off(event)
drake.off()
event — строка с названием события
('drag', 'drop', 'over',
'out', 'cancel', 'shadow' и т.
д.).callback — функция-обработчик события.
Если указана, удаляется только она; если не указана, удаляются все
обработчики для данного события.event, ни
callback, то метод удаляет все подписки на
все события объекта drake.Когда необходимо отключить только один обработчик, важно передать
именно ту функцию, которая была зарегистрирована через
drake.on(). Пример:
function handleDrop(el, target, source, sibling) {
console.log('Элемент сброшен:', el);
}
const drake = dragula([document.querySelector('#container1'), document.querySelector('#container2')]);
// Подписка на событие
drake.on('drop', handleDrop);
// Отписка от конкретного обработчика
drake.off('drop', handleDrop);
В этом примере обработчик handleDrop удаляется, а другие
возможные подписки на 'drop' остаются активными. Это
особенно важно в сложных интерфейсах, где один и тот же тип события
может иметь несколько функций.
Если необходимо очистить все обработчики одного события:
drake.off('drag');
После выполнения этой команды ни одна функция,
подписанная на 'drag', не будет вызвана при начале
перетаскивания элемента.
Для освобождения ресурсов, особенно при удалении DOM-элементов или при динамическом изменении интерфейса, можно удалить все подписки на все события:
drake.off();
Это гарантирует, что объект drake перестанет реагировать
на любые события и не создаст утечек памяти.
drake.off(event, callback) при
динамическом добавлении обработчиков. Это предотвращает
дублирование и неконтролируемое срабатывание функций.drake.off(). Это помогает избежать ошибок и
утечек памяти.drake.off(), так как библиотека сравнивает именно ссылку на
функцию.Метод drake.off() работает со всеми стандартными
событиями Dragula:
'drag' — начало перетаскивания.'dragend' — завершение перетаскивания.'drop' — сброс элемента в контейнер.'cancel' — отмена перетаскивания.'remove' — удаление элемента.'over' — вход элемента в контейнер.'out' — выход элемента из контейнера.'shadow' — появление тени перетаскиваемого
элемента.Каждое из этих событий можно отключить полностью или частично, управляя пользовательским интерфейсом максимально точно.
drake.off()Совместимость с drake.on() Метод
off полностью синхронизирован с on: удаление
обработчика работает только для тех функций, которые были
зарегистрированы с помощью on. Любые сторонние слушатели
DOM не будут затронуты.
Анонимные функции Использование анонимных функций при подписке делает последующую отписку невозможной:
drake.on('drop', function(el) { console.log(el); });
drake.off('drop', function(el) { console.log(el); }); // Не сработает
drake.off() позволяет поддерживать интерфейс
отзывчивым.Этот метод является ключевым инструментом для гибкого и безопасного управления событиями в Dragula, позволяя создавать динамические, масштабируемые и легко поддерживаемые drag-and-drop интерфейсы.