Метод Waypoints.destroyAll является статическим методом
библиотеки Waypoints и предназначен для полного удаления всех созданных
объектов Waypoint на странице. Этот метод особенно полезен при
необходимости очистки всех событий скролла и связанных с ними
обработчиков, например, при динамической подгрузке контента или переходе
между разделами SPA (Single Page Application).
Waypoints.destroyAll();
Waypoints и не требует передачи аргументов.undefined.
Метод просто выполняет очистку и не возвращает никаких данных.При создании Waypoint для элемента, библиотека регистрирует объект с
информацией о целевом элементе, оффсете и обработчиках событий. Метод
destroyAll выполняет следующие действия:
После вызова Waypoints.destroyAll ни один из ранее
созданных Waypoint не будет срабатывать при скролле.
1. Очистка при динамической загрузке контента
В SPA часто загружается новый контент через AJAX или fetch. Старые Waypoint остаются привязанными к удаляемым элементам, что может вызвать ошибки или лишние срабатывания.
// Создание Waypoint для нового контента
var waypoint = new Waypoint({
element: document.getElementById('dynamic-section'),
handler: function(direction) {
console.log('Waypoint сработал:', direction);
}
});
// Перед заменой контента полностью уничтожаем старые Waypoint
Waypoints.destroyAll();
2. Перенастройка анимаций при изменении DOM
Если на странице изменяется структура элементов, а Waypoint использовались для анимаций при прокрутке, их нужно удалить перед повторной инициализацией:
Waypoints.destroyAll();
// Создание новых Waypoint для обновленных элементов
document.querySelectorAll('.animated-item').forEach(function(el) {
new Waypoint({
element: el,
handler: function() {
el.classList.add('fade-in');
},
offset: '75%'
});
});
3. Полная деинициализация Waypoint
Иногда требуется полностью убрать все события Waypoint, например, при
переходе между страницами с разной логикой скролла.
Waypoints.destroyAll гарантирует, что никакой остаточной
логики не останется.
destroyAll объекты Waypoint становятся
недоступными, поэтому их повторное использование невозможно.destroy() для каждого Waypoint.Waypoint.destroy()Метод Waypoint.destroy() применяется к конкретному
экземпляру Waypoint:
var waypoint = new Waypoint({ element: el, handler: fn });
waypoint.destroy();
В отличие от этого, Waypoints.destroyAll():
// Инициализация Waypoint для нескольких элементов
var items = document.querySelectorAll('.section');
items.forEach(function(el) {
new Waypoint({
element: el,
handler: function(direction) {
console.log('Элемент в зоне видимости:', el.id, direction);
},
offset: '50%'
});
});
// Позже нужно полностью очистить все Waypoint
Waypoints.destroyAll();
// Повторная инициализация после динамической подгрузки
document.querySelectorAll('.new-section').forEach(function(el) {
new Waypoint({
element: el,
handler: function(direction) {
el.classList.add('visible');
},
offset: '60%'
});
});
Метод Waypoints.destroyAll обеспечивает безопасную и
полную деинициализацию всех событий Waypoint, упрощая работу с
динамическими и изменяемыми DOM-структурами.