Для начала работы с библиотекой Locomotive Scroll
необходимо создать экземпляр класса LocomotiveScroll и
указать контейнер, в котором будет происходить скроллирование. Основные
параметры:
import LocomotiveScroll fr om 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: true,
getDirection: true,
getSpeed: true,
});
up или down).Эти параметры влияют на последующее логирование событий, так как без
включения getDirection и getSpeed невозможно
получить соответствующие данные.
Locomotive Scroll предоставляет несколько ключевых событий для логирования:
data-scroll-call.Пример подписки на событие scroll:
scroll.on('scroll', (obj) => {
console.log('Текущая позиция:', obj.scroll.y);
console.log('Скорость скролла:', obj.speed);
console.log('Направление:', obj.direction);
});
obj содержит ключевые свойства:
scroll.x и scroll.y — текущие координаты
прокрутки по горизонтали и вертикали.limit.x и limit.y — максимальные значения
прокрутки.direction — направление (up или
down).speed — скорость движения.Для уменьшения количества выводов в консоль рекомендуется фильтровать события по скорости или позиции. Например:
scroll.on('scroll', ({ scroll, speed }) => {
if (speed > 2) {
console.log(`Высокая скорость: ${speed}`);
}
});
Это позволяет отслеживать только значимые изменения, исключая мелкие флуктуации при медленном скролле.
callЭлементам можно назначать атрибут
data-scroll-call="название_события", чтобы логировать их
появление:
Обработка события:
scroll.on('call', (func, dir, el) => {
console.log(`Элемент вызвал событие: ${func}`);
console.log(`Направление прокрутки: ${dir}`);
console.log(`Элемент:`, el);
});
data-scroll-call.Такой подход полезен для логирования появления элементов в зоне видимости и построения сложных анимаций.
scrollToМетод scroll.scrollTo() позволяет анимированно
прокручивать страницу к конкретному элементу или позиции. Событие
scrollTo срабатывает после завершения анимации:
scroll.scrollTo('#section-2', {
offset: -50,
duration: 1500,
easing: [0.25, 0.0, 0.35, 1.0]
});
scroll.on('scrollTo', ({ lim it, position }) => {
console.log(`Анимация прокрутки завершена на позиции ${position.y}`);
});
Это позволяет логировать каждое программное перемещение по странице.
Для систематизации логов часто создают функцию-обёртку:
function logScrollEvent(type, data) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] [${type}]`, data);
}
scroll.on('scroll', (obj) => logScrollEvent('scroll', obj));
scroll.on('call', (func, dir, el) => logScrollEvent('call', { func, dir, el }));
scroll.on('scrollTo', (data) => logScrollEvent('scrollTo', data));
Преимущества:
Логирование событий прокрутки может замедлять работу страницы при большом количестве элементов. Для оптимизации:
scroll:let timer;
scroll.on('scroll', (obj) => {
clearTimeout(timer);
timer = setTimeout(() => {
console.log('Позиция:', obj.scroll.y);
}, 50);
});
call и
scrollTo), а не каждое движение.Для аналитики удобно собирать несколько метрик:
scroll.y).speed).direction).call).scrollTo).С помощью комбинации этих данных можно строить полноценные системы отслеживания пользовательских действий и производить оптимизацию интерфейсов с плавной прокруткой.