Waypoints — это библиотека для отслеживания позиции элементов на странице относительно окна браузера. Одной из ключевых возможностей является автоматическое обновление позиции Waypoint при изменении DOM. Эта функция критически важна для динамических страниц, где элементы могут перемещаться, изменять размер или появляться/исчезать после загрузки страницы.
Автоматическое обновление позволяет Waypoints корректно вычислять
положение элементов без необходимости вручную вызывать методы
refresh() после каждого изменения контента.
autoRefreshWaypoints по умолчанию включает автоматическое
обновление через свойство autoRefresh, которое
устанавливается при создании Waypoint:
var waypoint = new Waypoint({
element: document.getElementById('example'),
handler: function(direction) {
console.log('Waypoint сработал при движении: ' + direction);
},
offset: '50%',
enabled: true
});
Waypoints отслеживает изменения размеров элементов и окна через внутренние таймеры и события. Если страница содержит динамический контент (например, подгружаемые блоки или анимации), библиотека автоматически пересчитает положение Waypoint, что предотвращает некорректное срабатывание.
refresh()Несмотря на наличие autoRefresh, в некоторых случаях
требуется явное обновление. Метод
refresh() пересчитывает позиции всех зарегистрированных
Waypoints:
Waypoint.refreshAll();
Когда использовать refresh():
resizeМетод принимает параметр immediate, позволяющий
выполнить пересчет мгновенно, без ожидания внутреннего таймера:
Waypoint.refreshAll(true);
continuous и horizontal WaypointsWaypoints делятся на вертикальные и
горизонтальные. Для вертикальных
(vertical) библиотека проверяет позицию элемента
относительно верхней границы окна, для горизонтальных
(horizontal) — относительно левой границы. Автоматическое
обновление работает для обоих типов, но важно учитывать:
refresh().var horizontalWaypoint = new Waypoint({
element: document.getElementById('horizontal'),
handler: function(direction) {
console.log('Горизонтальный Waypoint: ' + direction);
},
horizontal: true
});
Автоматическое обновление работает через интервалы и события
resize, что может создавать нагрузку на страницу с
большим количеством Waypoints. Для оптимизации рекомендуется:
waypoint.disable();
waypoint.enable();
Waypoint.refreshAll();
refresh() один раз после всех операций, чтобы избежать
многократных пересчетов.Waypoints отлично интегрируется с современными фреймворками (React, Vue, Angular), где DOM часто меняется. Основные рекомендации:
Waypoint.refreshAll()
после рендера нового контента.refresh().load для пересчета Waypoints.var images = document.querySelectorAll('img');
images.forEach(function(img) {
img.addEventListener('load', function() {
Waypoint.refreshAll();
});
});
Waypoints позволяет задать интервал автообновления через глобальную конфигурацию:
Waypoint.defaults.autoRefreshInterval = 200; // миллисекунды
Меньший интервал повышает точность, но увеличивает нагрузку на браузер. На страницах с тяжелым DOM рекомендуется ставить интервал 200–300 мс.
Offset — ключевой параметр Waypoint. При динамических изменениях размеров блока или контейнера, Waypoints корректно пересчитывает offset. Можно использовать:
offset: 100offset: '50%'var waypoint = new Waypoint({
element: document.getElementById('dynamic'),
handler: function(direction) {
console.log('Waypoint сработал!');
},
offset: function() {
return this.element.offsetHeight / 2;
}
});
Использование функции особенно удобно при изменении размеров контента.
Если элемент анимируется с помощью CSS или JS, автоматическое
обновление Waypoints позволяет корректно отслеживать его позицию в
процессе движения. Для плавных анимаций рекомендуется использовать
requestAnimationFrame и вызывать refresh()
после завершения анимации или в ключевых кадрах.
element.animate([{ transform: 'translateY(0)' }, { transform: 'translateY(100px)' }], {
duration: 500
}).onfin ish = function() {
Waypoint.refreshAll();
};
Автоматическое обновление Waypoints обеспечивает надежное и
точное срабатывание событий, независимо от динамических
изменений на странице. Понимание работы autoRefresh, метода
refresh() и правильного управления offset позволяет
создавать сложные интерфейсы с интерактивными элементами,
скролл-анимациями и подгрузкой контента без потери синхронизации
Waypoints.