destroy() - удаление функционала

Метод destroy() предназначен для полного удаления функционала плавной прокрутки, созданного экземпляром Smooth Scroll. Он отключает все обработчики событий и возвращает элементы страницы к их исходному поведению без вмешательства скрипта. Этот метод особенно полезен при динамическом изменении контента, повторной инициализации или освобождении ресурсов в одностраничных приложениях.


Синтаксис

const scroll = new SmoothScroll(selector, options);
scroll.destroy();
  • selector — CSS-селектор ссылок, на которые применяется плавная прокрутка.
  • options — объект с настройками Smooth Scroll, используемый при инициализации.
  • destroy() — метод экземпляра, вызываемый без параметров.

Что делает destroy()

  1. Удаление обработчиков кликов Все события click, назначенные на элементы, соответствующие селектору, удаляются. После вызова destroy() нажатие на ссылку с якорем будет вести к стандартной прокрутке браузера.

  2. Очистка внутренних ссылок Метод удаляет любые внутренние привязки к DOM, которые Smooth Scroll использовал для отслеживания положения якорей и анимации.

  3. Прекращение анимаций Любые активные анимации прокрутки прекращаются. Если в момент вызова destroy() скролл выполняется, он останавливается на текущей позиции.

  4. Освобождение ресурсов События, таймеры и объекты, созданные библиотекой для управления скроллом, очищаются, что предотвращает утечки памяти.


Примеры использования

Пример 1. Простое удаление функционала

const scroll = new SmoothScroll('a[href*="#"]');

// Позже, при необходимости отключить скролл
scroll.destroy();

После вызова destroy() клики на ссылки с якорями возвращаются к стандартному поведению браузера, а плавная анимация перестает работать.

Пример 2. Удаление перед повторной инициализацией

let scroll = new SmoothScroll('a[href*="#"]', { speed: 800 });

// Изменился контент, нужно обновить ссылки
scroll.destroy();
scroll = new SmoothScroll('a[href*="#"]', { speed: 600 });

В этом примере старый экземпляр уничтожается, чтобы избежать дублирования обработчиков и конфликтов при создании нового.


Особенности и нюансы

  • Метод destroy() не удаляет сам объект JavaScript. Он лишь отключает функционал. Экземпляр можно переиспользовать после новой инициализации.
  • При динамическом добавлении ссылок на страницу повторная инициализация после destroy() необходима для корректной работы.
  • Если использовать библиотеку вместе с фреймворками, которые часто обновляют DOM, destroy() предотвращает накопление обработчиков и конфликтов.
  • После вызова destroy() любые методы экземпляра, кроме destroy(), не будут работать корректно до повторной инициализации.

Советы по применению

  • Всегда вызывать destroy() перед удалением элементов из DOM, чтобы избежать ошибок событий.
  • Использовать метод в SPA (Single Page Application) при смене страниц или переходе между компонентами, чтобы сохранять оптимальную производительность.
  • Если требуется временно отключить скролл без удаления объекта, можно использовать опцию scroll.disable() (если библиотека поддерживает), а для полного удаления функционала применять только destroy().

Метод destroy() обеспечивает безопасное и полное отключение Smooth Scroll, сохраняя страницу в исходном состоянии и предотвращая утечки памяти или конфликты обработчиков при динамических изменениях интерфейса.