Библиотека Waypoints позволяет реагировать на появление элементов на экране при скролле страницы. Условная активация — это механизм, при котором обработчик срабатывает только при выполнении определённых условий, например, когда элемент виден определённую часть или когда пользователь прокрутил страницу до конкретного положения.
Для начала создаётся обычный Waypoint:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
console.log('Элемент достигнут!', direction);
}
});
Чтобы добавить условие активации, можно использовать проверку внутри обработчика:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
if (window.scrollY > 500) { // срабатывает только если прокрутка > 500px
console.log('Условие выполнено: прокрутка больше 500px');
}
}
});
В этом примере событие handler вызывается при
достижении элемента, но фактическое действие выполняется только если
выполнено условие window.scrollY > 500.
Свойство offset позволяет настроить точку активации
Waypoint относительно начала страницы или контейнера:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
console.log('Waypoint активирован в направлении', direction);
},
offset: '75%' // срабатывает, когда верх элемента достигает 75% высоты окна
});
Важный момент: offset может быть числом
(пиксели) или строкой с процентом, что позволяет гибко управлять
условной активацией в зависимости от размера окна или расположения
элемента.
Waypoints поддерживает опцию once, которая гарантирует
одноразовое срабатывание обработчика:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
console.log('Событие сработало один раз');
},
offset: '50%',
enabled: true
});
waypoint.disable(); // можно отключить waypoint после срабатывания
Если требуется более сложная логика, можно комбинировать
enabled/disable с проверкой внутри
handler:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
if (direction === 'down' && window.innerWidth > 768) {
console.log('Условие выполнено: скролл вниз на большом экране');
this.disable();
}
}
});
Для случаев, когда элемент должен активироваться при нескольких
условиях одновременно, проверка внутри handler может быть
составной:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
var isVisible = this.element.getBoundingClientRect().top < window.innerHeight;
var userScrolledEnough = window.scrollY > 300;
if (isVisible && userScrolledEnough) {
console.log('Элемент виден и прокрутка > 300px');
}
},
offset: '0%'
});
Такой подход позволяет создавать сложные интерактивные эффекты, например, запуск анимации только если элемент полностью виден на экране и пользователь уже прокрутил страницу на заданное расстояние.
Если элементы подгружаются динамически (например, через AJAX), необходимо пересоздавать Waypoints после добавления новых элементов:
function initializeWaypoints() {
document.querySelectorAll('.dynamic-item').forEach(function(el) {
new Waypoint({
element: el,
handler: function() {
console.log('Динамический элемент достигнут');
},
offset: '80%'
});
});
}
// После загрузки новых элементов
initializeWaypoints();
Таким образом условная активация сохраняется даже для контента, добавленного после первоначальной загрузки страницы.
Условная активация в Waypoints — это комбинация offset, направления скролла, проверок состояния элемента и возможностей включения/отключения Waypoint. Этот подход позволяет создавать высоко адаптивные интерфейсы, которые реагируют только при необходимости и повышают производительность страниц.