Библиотека Dom7 предоставляет удобный API для работы с DOM-элементами, включая управление событиями прокрутки. События прокрутки позволяют отслеживать движение страницы или конкретного элемента и реагировать на него, например, для реализации «липких» шапок, эффектов параллакса или динамической подгрузки контента.
Dom7 использует метод on для привязки обработчиков к
событиям. Событие прокрутки обозначается как 'scroll'.
import Dom7 from 'dom7';
const $content = Dom7('.content');
$content.on('scroll', function (event) {
console.log('Прокрутка произошла', event.target.scrollTop);
});
В примере $content — это коллекция элементов Dom7. В
обработчике доступен объект события event, а свойство
event.target.scrollTop возвращает текущее смещение по
вертикали внутри элемента.
Для отслеживания прокрутки всей страницы используется объект
window. Dom7 позволяет писать:
Dom7(window).on('scroll', function () {
const scrollPos = window.scrollY || document.documentElement.scrollTop;
console.log('Скролл окна:', scrollPos);
});
Особенности:
scrollY или
document.documentElement.scrollTop — кроссбраузерные
способы получения вертикальной позиции.Dom7 предоставляет метод off, позволяющий удалять
обработчики:
function onScroll(event) {
console.log('Прокрутка');
}
$content.on('scroll', onScroll);
// Позже можно удалить обработчик
$content.off('scroll', onScroll);
Удаление обработчиков предотвращает утечки памяти и снижает нагрузку на браузер.
Событие 'scroll' можно использовать не только на
window, но и на элементах с прокруткой. Например, для блока
с фиксированной высотой и overflow: auto:
const $box = Dom7('.scroll-box');
$box.on('scroll', function (event) {
const scrollTop = event.target.scrollTop;
const scrollHeight = event.target.scrollHeight;
const clientHeight = event.target.clientHeight;
if (scrollTop + clientHeight >= scrollHeight) {
console.log('Достигнут низ блока');
}
});
Здесь вычисляется, когда пользователь доскроллил до конца блока, что полезно для реализации бесконечной подгрузки контента.
Для анализа направления движения можно хранить предыдущую позицию и сравнивать с текущей:
let lastScrollTop = 0;
Dom7(window).on('scroll', function () {
const st = window.scrollY || document.documentElement.scrollTop;
if (st > lastScrollTop) {
console.log('Прокрутка вниз');
} else {
console.log('Прокрутка вверх');
}
lastScrollTop = st <= 0 ? 0 : st; // предотвращение отрицательных значений
});
Такой подход часто используется для скрытия или отображения элементов интерфейса в зависимости от направления скролла.
События прокрутки вызываются очень часто, что может замедлять страницу. Для повышения производительности применяются техники:
Пример троттлинга через requestAnimationFrame:
let ticking = false;
Dom7(window).on('scroll', function () {
if (!ticking) {
window.requestAnimationFrame(function () {
console.log('Обновление при прокрутке');
ticking = false;
});
ticking = true;
}
});
Такой метод гарантирует вызов функции один раз на каждый кадр, что экономит ресурсы.
Dom7 позволяет комбинировать события прокрутки с другими методами, например, анимацией элементов или динамическим изменением классов:
const $header = Dom7('.header');
Dom7(window).on('scroll', function () {
if (window.scrollY > 100) {
$header.addClass('header--scrolled');
} else {
$header.removeClass('header--scrolled');
}
});
Это часто используется для создания «липких» шапок и изменения стиля при прокрутке страницы.
События прокрутки в Dom7 обеспечивают:
on /
off).overflow.Эти возможности позволяют создавать интерактивные, отзывчивые интерфейсы с высокой производительностью и полной управляемостью прокрутки.