Smooth Scroll — это библиотека для создания плавной прокрутки страниц и элементов в браузере. Одним из ключевых компонентов при работе с прокруткой являются индикаторы прокрутки — визуальные элементы, которые показывают пользователю текущую позицию на странице или внутри контейнера.
Индикаторы прокрутки могут быть как стандартными (полоска вверху страницы), так и кастомными, с анимацией и прогресс-барами. В сочетании с Smooth Scroll они позволяют создавать динамичные, интерактивные интерфейсы.
Для интеграции индикатора прокрутки с Smooth Scroll необходимо инициализировать объект библиотеки с соответствующими настройками:
import SmoothScroll from 'smooth-scroll';
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
offset: 0,
easing: 'easeInOutCubic'
});
Ключевые параметры:
speed — скорость анимации в миллисекундах.offset — смещение относительно целевого элемента,
полезно при фиксированных шапках.easing — функция плавности движения
(linear, easeInOutCubic,
easeOutQuad и другие).Индикаторы прокрутки обычно требуют вычисления текущей позиции относительно всей страницы. Smooth Scroll предоставляет события и методы, которые позволяют получать текущую позицию прокрутки в реальном времени.
Для кастомного прогресс-бара можно использовать простой
<div> с абсолютным позиционированием:
<div id="scroll-indicator"></div>
#scroll-indicator {
position: fixed;
top: 0;
left: 0;
height: 4px;
background-color: #3498db;
width: 0%;
z-index: 9999;
}
Обновление индикатора при прокрутке:
const indicator = document.getElementById('scroll-indicator');
window.addEventListener('scroll', () => {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
const progress = (scrollTop / scrollHeight) * 100;
indicator.style.width = progress + '%';
});
Этот подход позволяет синхронизировать индикатор с прокруткой Smooth Scroll, обеспечивая плавный визуальный эффект.
Если используется прокрутка внутри определённого блока, а не всей страницы, необходимо:
const container = document.querySelector('.scroll-container');
const indicator = document.getElementById('container-indicator');
container.addEventListener('scroll', () => {
const scrollTop = container.scrollTop;
const scrollHeight = container.scrollHeight - container.clientHeight;
const progress = (scrollTop / scrollHeight) * 100;
indicator.style.width = progress + '%';
});
Smooth Scroll предоставляет события:
scrollStart — запуск анимации прокрутки.scrollStop — завершение анимации.scrollMove — непрерывное движение, полезно для
синхронизации прогресс-бара.Пример использования scrollMove:
scroll.animateScroll = function(target, options) {
const updateIndicator = () => {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight - window.innerHeight;
indicator.style.width = (scrollTop / scrollHeight * 100) + '%';
requestAnimationFrame(updateIndicator);
};
updateIndicator();
};
Для плавного завершения прогресс-бара после анимации Smooth Scroll можно использовать CSS-переход:
#scroll-indicator {
transition: width 0.2s ease-out;
}
Это сглаживает резкие изменения ширины при завершении скролла.
Вертикальные и горизонтальные индикаторы Можно
создавать прогресс-бары по бокам или снизу страницы, меняя свойства
height и top/left.
Сегментированные индикаторы Для многостраничных или лендингов с секциями можно делить индикатор на сегменты и подсвечивать текущую секцию.
Синхронизация с параллаксом Smooth Scroll поддерживает плавную анимацию прокрутки, что позволяет интегрировать индикаторы с эффектами параллакса.
Эти подходы создают интерактивные и визуально привлекательные элементы интерфейса, повышая удобство навигации и восприятие контента.