Waypoints.viewportHeight — это статическое свойство
библиотеки Waypoints, которое возвращает высоту видимой
области окна браузера, то есть высоту viewport. Оно
измеряется в пикселях и используется для определения того, когда элемент
входит в видимую часть страницы, а также для расчёта смещения при
срабатывании waypoint.
var viewportHeight = Waypoint.viewportHeight();
console.log(viewportHeight); // Выведет высоту видимой области в пикселях
Важно понимать, что это значение динамическое и изменяется при изменении размеров окна браузера, например, при ресайзе или повороте устройства.
Waypoints.viewportHeight часто используется для создания
динамических триггеров прокрутки, когда необходимо,
чтобы waypoint срабатывал относительно видимой области, а не всего
документа. Например, чтобы анимация элемента начиналась, когда он
появляется на экране.
var waypoint = new Waypoint({
element: document.getElementById('feature'),
handler: function(direction) {
console.log('Элемент видим!');
},
offset: function() {
return Waypoint.viewportHeight() * 0.8; // Срабатывает, когда элемент достиг 80% высоты viewport
}
});
Здесь ключевой момент — использование функции в offset.
Это гарантирует, что при каждом ресайзе браузера смещение будет
пересчитано, а waypoint не потеряет актуальность.
В Waypoints offset можно задавать в пикселях или
процентах, но использование Waypoints.viewportHeight даёт
точный контроль относительно видимой области,
независимо от длины документа:
offset: '50%') вычисляется
относительно всей высоты документа.Waypoints.viewportHeight позволяет
привязаться к текущей видимой области и динамически адаптироваться к
устройству и размеру окна.Если высота окна меняется, то waypoint с фиксированным пиксельным
смещением может срабатывать некорректно. Использование
Waypoints.viewportHeight в функции offset решает эту
проблему:
var waypoint = new Waypoint({
element: document.getElementById('section'),
handler: function() {
console.log('Waypoint сработал!');
},
offset: function() {
return Waypoint.viewportHeight() - 100; // 100px от нижнего края viewport
}
});
window.addEventListener('resize', function() {
Waypoint.refreshAll(); // Обновление всех waypoint после изменения размеров
});
Метод Waypoint.refreshAll() пересчитывает позиции всех
waypoint, чтобы учитывать новую высоту viewport и изменение контента
страницы.
Waypoints.viewportHeight можно запускать анимацию, когда
элемент почти полностью появляется на экране:new Waypoint({
element: document.querySelector('.animate-me'),
handler: function() {
this.element.classList.add('active');
},
offset: function() {
return Waypoint.viewportHeight() * 0.9; // 90% высоты окна
}
});
var sections = document.querySelectorAll('.section');
sections.forEach(function(section) {
new Waypoint({
element: section,
handler: function(direction) {
console.log('Секция активна:', section.id);
},
offset: function() {
return Waypoint.viewportHeight() / 2; // середина видимой области
}
});
});
var lazyImages = document.querySelectorAll('.lazy');
lazyImages.forEach(function(img) {
new Waypoint({
element: img,
handler: function() {
img.src = img.dataset.src;
},
offset: function() {
return Waypoint.viewportHeight() - 50; // чуть раньше появления на экране
}
});
});
Waypoints.viewportHeight не кэшируется
автоматически. Для точного расчёта лучше всегда вызывать его
внутри функции offset.Waypoint.refreshAll() важно после
изменения DOM, добавления контента или изменения размеров окна.Waypoints.viewportHeight работает во всех современных
браузерах и корректно учитывает скролл-бары, если они отображаются.Waypoints.viewportHeight является одним из ключевых
инструментов для создания адаптивных и отзывчивых триггеров прокрутки в
Waypoints, позволяя точно позиционировать события
относительно видимой области и динамически реагировать на изменения
размера окна.