Метод Waypoints.refreshAll является
ключевым инструментом в библиотеке Waypoints для
управления точками прокрутки на веб-странице. Он используется для
пересчёта позиций всех существующих Waypoint-объектов, что критически
важно при динамическом изменении контента на странице.
Waypoints.refreshAll() выполняет обход
всех созданных экземпляров Waypoint и обновляет их координаты. Это
необходимо, потому что Waypoints вычисляет позицию элемента на момент
инициализации. Если DOM изменяется после этого (например, добавляются
новые блоки, меняется размер изображений или динамически подгружается
контент), старые координаты становятся некорректными, что может
приводить к неправильному срабатыванию коллбеков.
// Обновление всех Waypoints на странице
Waypoint.refreshAll();
Динамическая загрузка контента При добавлении
новых элементов в DOM после начальной загрузки страницы их Waypoints не
будут работать корректно до вызова refreshAll.
Изменение размеров элементов Изменение высоты блоков, изображений или других элементов может сместить точки срабатывания Waypoint. Пересчет гарантирует корректную активацию коллбеков.
Анимации и эффекты на странице Если элементы
появляются, исчезают или изменяют размер через анимацию,
refreshAll обеспечивает правильное срабатывание Waypoint
после завершения визуальных изменений.
// Создание Waypoint для элемента
var waypoint = new Waypoint({
element: document.getElementById('section1'),
handler: function(direction) {
console.log('Waypoint сработал при прокрутке', direction);
},
offset: '50%' // срабатывание при середине экрана
});
// Динамическое добавление нового контента
var newSection = document.createElement('div');
newSection.id = 'section2';
newSection.style.height = '500px';
document.body.appendChild(newSection);
// Создание нового Waypoint для добавленного блока
new Waypoint({
element: newSection,
handler: function(direction) {
console.log('Новый Waypoint сработал', direction);
}
});
// Пересчет всех Waypoints
Waypoint.refreshAll();
В этом примере без вызова Waypoint.refreshAll() точка
для section2 могла бы быть рассчитана некорректно, особенно
если новые блоки добавляются не в конец документа или страница уже
прокручена.
Библиотека хранит все Waypoint-объекты в глобальном
массиве. Метод refreshAll вызывает внутренний
метод refresh() для каждого из них. Это значит, что
независимо от того, сколько Waypoints создано, один вызов
refreshAll обновит все позиции одновременно.
Waypoint.refresh() обновляет
только один конкретный Waypoint, вызывается на
экземпляре объекта:
waypoint.refresh();Waypoint.refreshAll() обновляет
все существующие Waypoints, что удобно при массовых
изменениях DOM:
Waypoint.refreshAll();Использование refreshAll экономит время и предотвращает
необходимость перебирать каждый Waypoint вручную.
Вызывать после завершения всех изменений DOM, чтобы избежать лишних пересчетов.
При большом количестве Waypoints частые вызовы
refreshAll могут влиять на производительность, поэтому
оптимально вызывать его один раз после внесения всех
изменений.
Можно использовать с таймаутом или дебаунсом для асинхронных загрузок:
setTimeout(function() {
Waypoint.refreshAll();
}, 500);Совместим с Sticky Elements, Infinite Scroll и другими динамическими эффектами, где элементы могут появляться или исчезать после первоначальной загрузки.
Метод refreshAll проходит по массиву
_waypoints и для каждого элемента выполняет пересчет
позиции относительно top offset документа и текущей
прокрутки. Результатом является корректная привязка коллбеков к новым
координатам элементов.
Это обеспечивает стабильность работы Waypoints на страницах с адаптивной версткой, где высота блоков может изменяться на разных разрешениях экрана.
Waypoint.refreshAll() после динамических
изменений DOM.Waypoint.refresh() для выборочного
пересчета, если известно, какие элементы изменились.