Метод drake.destroy() предназначен для полного удаления
экземпляра Dragula и освобождения всех ресурсов, связанных с ним. Он
является финальным шагом в жизненном цикле объекта drake и
позволяет корректно завершить работу с библиотекой, предотвращая утечки
памяти и непреднамеренные события перетаскивания.
drake.destroy();
Метод не принимает аргументов и возвращает undefined.
После вызова destroy() объект drake больше не
управляет контейнерами и элементами, на которые ранее был наложен
функционал перетаскивания.
Вызов drake.destroy() приводит к следующим
действиям:
Удаление слушателей событий Все внутренние
обработчики событий, установленные Dragula для контейнеров
(drag, drop, over,
out и другие), автоматически удаляются.
Очистка временных данных Все временные объекты, такие как переносимые элементы и клонированные узлы, очищаются, что предотвращает накопление мусора в DOM и памяти.
Отключение перетаскивания Любые элементы, ранее доступные для drag-and-drop, перестают быть интерактивными. Визуальные эффекты перетаскивания, такие как тень элемента или placeholder, исчезают.
Невозможность повторного использования После
вызова destroy() экземпляр drake не может быть
восстановлен. Для нового перетаскивания требуется создать новый объект
через dragula(containers, options).
// Создание экземпляра Dragula
const drake = dragula([document.querySelector('#container1'), document.querySelector('#container2')]);
// Вызов destroy после окончания работы с перетаскиванием
document.querySelector('#stopButton').addEventListener('click', () => {
drake.destroy();
console.log('Dragula остановлена и все ресурсы очищены');
});
В этом примере кнопка #stopButton служит триггером для
полной деактивации Dragula. После вызова destroy() элементы
в контейнерах перестают реагировать на перетаскивание, а обработчики
событий удаляются.
Всегда вызывать перед удалением контейнера из
DOM Если контейнеры или элементы будут удалены динамически,
вызов destroy() предотвращает оставление “висящих”
слушателей событий, которые могут вызвать ошибки или утечки
памяти.
Не пытаться повторно использовать объект После
destroy() экземпляр drake становится
неактивным. Для нового перетаскивания создается отдельный объект
Dragula.
Интеграция с динамическим контентом В случае
динамического добавления или удаления контейнеров следует сначала
вызвать destroy(), затем создать новый экземпляр Dragula с
актуальными контейнерами. Это обеспечивает корректное отслеживание новых
элементов и предотвращает конфликты событий.
Dragula предоставляет методы drake.cancel(true) и
drake.remove() для частичной очистки:
drake.cancel() возвращает элемент на исходную позицию
после перетаскивания.drake.remove() удаляет переносимый элемент из DOM.В отличие от них, drake.destroy() полностью
отключает всю функциональность перетаскивания и освобождает
внутренние ресурсы библиотеки.
Игнорирование destroy при удалении контейнера Это приводит к оставлению активных слушателей и потенциальным утечкам памяти.
Повторный вызов методов Dragula после destroy
Любые действия с элементами через объект drake после вызова
destroy() не будут работать и могут вызвать
ошибки.
Неправильное управление динамическими контейнерами Добавление новых контейнеров в старый экземпляр Dragula без пересоздания объекта нарушает логику перетаскивания.
drake.destroy() является ключевым инструментом для
безопасного завершения работы с Dragula, особенно в сложных интерфейсах
с динамическими контейнерами и большим количеством элементов.
Использование этого метода гарантирует чистоту DOM, освобождение памяти
и корректное отключение всех событий перетаскивания.