destroy()

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

Основной синтаксис

scroll.destroy();

Где scroll — это объект, созданный через конструктор LocomotiveScroll:

const scroll = new LocomotiveScroll({
  el: document.querySelector('#js-scroll'),
  smooth: true,
  multiplier: 1,
});

Вызов scroll.destroy() выполняет следующие действия:

  1. Удаление всех слушателей событий Locomotive Scroll навешивает обработчики на события прокрутки, ресайза окна и мышиного ввода. Метод destroy() полностью снимает эти слушатели, предотвращая утечки памяти.

  2. Сброс стилей элементов Элементы, к которым применялись трансформации (transform: translate3d), возвращаются в исходное состояние. Если применялась плавная прокрутка, все внутренние стили для анимации и позиционирования удаляются.

  3. Очистка внутренних переменных и кеша Все данные о позициях, размерах секций и анимациях сбрасываются. Это особенно важно, если объект создается повторно после уничтожения.

Применение в динамических интерфейсах

Метод destroy() часто используется в проектах с динамическим контентом:

  • SPA и переходы между страницами При смене контента без полной перезагрузки страницы старый экземпляр Locomotive Scroll необходимо удалить, чтобы новый скролл корректно инициализировался.
// Пример для SPA
scroll.destroy();
scroll = new LocomotiveScroll({
  el: document.querySelector('#js-scroll'),
  smooth: true,
});
  • Адаптация под разные устройства Иногда требуется отключить плавную прокрутку на мобильных устройствах. В этом случае destroy() освобождает ресурсы и позволяет использовать стандартный скролл.
if (window.innerWidth < 768) {
  scroll.destroy();
}

Важные особенности

  • После вызова destroy() объект scroll не может быть использован повторно. Для возобновления функционала необходимо создать новый экземпляр.
  • Метод корректно работает с анимациями, основанными на data-scroll атрибутах. Все события scroll и call удаляются.
  • Если был установлен scrollbar, метод удаляет его полностью вместе с обработчиками перетаскивания.

Практические рекомендации

  1. Перед уничтожением убедиться в сохранении важных данных Если используется отслеживание позиции или прогресса скролла, их необходимо сохранить в отдельной переменной до вызова destroy().

  2. Повторная инициализация После удаления старого экземпляра рекомендуется использовать setTimeout или requestAnimationFrame для новой инициализации, чтобы DOM успел обновиться.

scroll.destroy();
requestAnimationFrame(() => {
  scroll = new LocomotiveScroll({
    el: document.querySelector('#js-scroll'),
    smooth: true,
  });
});
  1. Использование с компонентами В фреймворках вроде React или Vue destroy() следует вызывать в методах жизненного цикла componentWillUnmount или beforeUnmount, чтобы избежать утечек памяти.

Проверка корректного удаления

После вызова destroy() можно проверить, остались ли слушатели или трансформации:

console.log(scroll); // методы уничтожены

Если какие-либо события продолжают работать, это обычно связано с кастомными обработчиками, добавленными вне Locomotive Scroll. В таких случаях необходимо вручную снять эти слушатели.

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