Waypoints — это библиотека JavaScript для отслеживания положения элементов на странице относительно окна просмотра. Её гибкость обеспечивается многочисленными опциями, которые можно комбинировать для достижения сложного поведения. Понимание того, как эти опции взаимодействуют, критично для построения динамичных и отзывчивых интерфейсов.
offset определяет смещение точки
срабатывания относительно начала контекста. Значение может быть задано в
пикселях или в процентах:
new Waypoint({
element: document.getElementById('section1'),
handler: function(direction) {
console.log('Waypoint сработал:', direction);
},
offset: '25%'
});
context позволяет задать контейнер,
относительно которого будет отслеживаться положение элемента. По
умолчанию контекст — это окно просмотра (window), но его
можно изменить на любой скроллируемый элемент:
new Waypoint({
element: document.getElementById('item'),
handler: function(direction) {
console.log('Waypoint сработал внутри контекста');
},
context: document.getElementById('scrollableContainer'),
offset: 50
});
Комбинирование context и offset позволяет
создавать сложные эффекты, например анимацию элементов при прокрутке
определённой области страницы.
handlerФункция handler получает один аргумент
direction, который может быть 'down' или
'up'. Опция continuous определяет, будет ли
срабатывать waypoint каждый раз, когда элемент пересекает линию
срабатывания, или только один раз:
new Waypoint({
element: document.getElementById('section2'),
handler: function(direction) {
if(direction === 'down') {
console.log('Прокрутка вниз');
} else {
console.log('Прокрутка вверх');
}
},
continuous: false
});
Комбинируя continuous с offset, можно
добиться точного контроля за моментом и частотой срабатывания анимаций
или загрузки данных.
group для синхронизацииОпция group позволяет объединять
несколько Waypoints в одну группу, чтобы управлять их срабатыванием
совместно. Это особенно полезно для последовательных анимаций:
new Waypoint({
element: document.getElementById('step1'),
handler: function() {
console.log('Первый шаг');
},
group: 'steps'
});
new Waypoint({
element: document.getElementById('step2'),
handler: function() {
console.log('Второй шаг');
},
group: 'steps'
});
С помощью групп можно использовать метод
Waypoint.Group.findByName('steps').flush() для
принудительного срабатывания всех waypoint’ов группы.
enabled и динамического добавления waypoint’овWaypoints поддерживает динамическое включение и отключение с помощью
метода disable() и enable(). Это позволяет
создавать интерактивные интерфейсы, где waypoint активен только в
определённых условиях:
var wp = new Waypoint({
element: document.getElementById('dynamic'),
handler: function() {
console.log('Waypoint активен только при включении');
}
});
wp.disable(); // временно отключаем
wp.enable(); // снова включаем
Комбинируя это с context и offset, можно
управлять waypoint’ами в зависимости от положения других элементов на
странице или состояния интерфейса.
horizontal и vertical
слеженияПо умолчанию Waypoints отслеживает вертикальное пересечение. Опция
horizontal позволяет переключиться на
горизонтальное слежение. Комбинирование вертикального и горизонтального
отслеживания с различными offset и context
открывает возможности для сложных анимационных эффектов при прокрутке в
обеих плоскостях:
new Waypoint({
element: document.getElementById('horizontalItem'),
handler: function(direction) {
console.log('Горизонтальное срабатывание:', direction);
},
horizontal: true,
offset: '50%'
});
Пример комплексного сценария:
var complexWaypoint = new Waypoint({
element: document.getElementById('complexSection'),
handler: function(direction) {
if(direction === 'down') {
console.log('Анимация вниз для группы steps');
} else {
console.log('Анимация вверх для группы steps');
}
},
offset: '30%',
context: document.getElementById('scrollContainer'),
continuous: true,
group: 'steps'
});
В этом случае одновременно задействованы:
offset;context;continuous;group;handler(direction).Такое комбинирование позволяет строить многоуровневые интерактивные сценарии, где элементы страницы реагируют на прокрутку гибко и предсказуемо, обеспечивая качественный UX.
flush()
можно управлять очередностью анимаций.enable() и disable() позволяют
динамически контролировать активность waypoint’ов без их удаления.Эти комбинации опций создают основу для построения интерактивных интерфейсов, где элементы страницы анимируются, загружаются или изменяются в зависимости от прокрутки и пользовательского взаимодействия.