Библиотека Stickybits предназначена для реализации “липких” элементов
на веб-странице с помощью JavaScript, упрощая работу с позиционированием
элементов при прокрутке. Одним из ключевых аспектов работы Stickybits
является возможность отслеживания состояний элемента: когда он
становится “липким”, когда возвращается в обычное положение и когда
фиксируется в нижней границе родителя. Событие stuck
относится к этому функционалу и играет важную роль при управлении
поведением элементов.
stuckСобытие stuck возникает в момент, когда элемент, к
которому применён Stickybits, фиксируется в своём положении при
прокрутке и достигает нижней границы родительского контейнера.
В отличие от состояния sticky, которое активируется при
закреплении элемента в верхней части видимой области окна,
stuck сигнализирует, что элемент больше не движется с
прокруткой и “прилип” к родителю.
Основная цель события — дать возможность выполнять действия именно в этот момент. Например, можно запускать анимации, изменять стили или запускать логирование для аналитики.
Для работы с событиями сначала нужно создать экземпляр Stickybits:
// Инициализация sticky элемента
const stickyElement = stickybits('.my-sticky', {
stickyBitStickyOffset: 0, // смещение сверху при фиксации
useStickyClasses: true // добавляет CSS классы для состояний
});
Параметр useStickyClasses важен, если планируется
использовать CSS-классы .is-sticky, .is-stuck
и .is-top, так как событие stuck тесно связано
с классом .is-stuck.
stuckStickybits позволяет отслеживать событие через стандартные
DOM-события CustomEvent. Для элемента можно добавить
слушатель:
const element = document.querySelector('.my-sticky');
element.addEventListener('stuck', function(event) {
console.log('Элемент достиг нижней границы родителя и зафиксирован:', event.target);
// Здесь можно добавить любые действия
});
В этом примере event.target указывает на элемент,
который стал “stuck”. Событие срабатывает только один раз при
достижении нижней границы родителя, если элемент снова покинет
эту позицию (например, прокрутка вверх), оно не повторяется до следующей
фиксации.
Stickybits автоматически добавляет и убирает классы, связанные с состояниями элемента:
.is-top — элемент в исходном положении..is-sticky — элемент фиксируется в верхней части
видимой области..is-stuck — элемент зафиксирован в нижней границе
родителя.Событие stuck срабатывает одновременно с добавлением
класса .is-stuck. Это позволяет комбинировать JS и CSS для
создания сложных визуальных эффектов:
.my-sticky.is-stuck {
background-color: #f0f0f0;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
stuck от
sticky и unstucksticky — срабатывает, когда элемент
начинает прилипать к верхней части окна.stuck — срабатывает, когда элемент
достигает нижней границы родителя и полностью фиксируется.unstuck — срабатывает, когда элемент
выходит из состояния stuck, возвращаясь к нормальному
позиционированию.element.addEventListener('stuck', () => {
element.textContent = 'Вы достигли конца секции';
});
element.addEventListener('stuck', () => {
element.classList.add('animate-stuck');
});
element.addEventListener('stuck', () => {
sendAnalytics({action: 'sticky_end', element: element.id});
});
useStickyClasses: true,
чтобы классы синхронизировались с событиями, что упрощает
стилизацию.stuck, так как событие может срабатывать при
быстрой прокрутке, особенно на длинных страницах.stuck не сработает, если родитель имеет недостаточную
высоту для фиксации элемента.Событие stuck обеспечивает точный контроль над моментом
фиксации элемента на странице и позволяет создавать сложные
интерактивные интерфейсы, которые реагируют на прокрутку не только
визуально, но и функционально.