Smooth Scroll — это библиотека для плавной анимации прокрутки в веб-страницах, которая позволяет контролировать как вертикальную, так и горизонтальную навигацию. Горизонтальная прокрутка особенно полезна для галерей, каруселей, таблиц с большим количеством колонок и интерфейсов типа «timeline». Библиотека обеспечивает управление скоростью, продолжительностью и кривой анимации прокрутки.
// Инициализация Smooth Scroll для горизонтальной прокрутки
const scroll = new SmoothScroll('.scroll-link', {
speed: 800,
offset: 0,
easing: 'easeInOutCubic',
direction: 'horizontal'
});
Ключевые параметры для горизонтальной прокрутки:
linear, easeInOutCubic,
easeOutQuart и др.).'vertical' или 'horizontal'.Smooth Scroll позволяет назначать элементы, кликая по которым будет
происходить анимация. Для горизонтальной прокрутки целевые элементы
должны располагаться в горизонтальном контейнере с
overflow-x: scroll.
<div class="scroll-container">
<section id="section1" class="scroll-section">Секция 1</section>
<section id="section2" class="scroll-section">Секция 2</section>
<section id="section3" class="scroll-section">Секция 3</section>
</div>
<a href="#section2" class="scroll-link">Перейти к секции 2</a>
.scroll-container {
display: flex;
overflow-x: auto;
scroll-behavior: smooth;
width: 100%;
}
.scroll-section {
flex: 0 0 300px;
margin-right: 20px;
}
В этом примере Smooth Scroll плавно перемещает контейнер по горизонтали к нужной секции при клике на ссылку.
Для горизонтальной прокрутки библиотека оперирует свойством
scrollLeft контейнера. Внутренние методы Smooth Scroll
автоматически вычисляют позицию целевого элемента и выполняют
анимацию.
scroll.animateScroll(document.querySelector('#section3'));
Здесь происходит плавная прокрутка контейнера к элементу с
id="section3".
Важно учитывать: если контейнер не имеет явно
заданной ширины или не установлен
display: flex/inline-flex, библиотека может
некорректно вычислить позицию элемента.
Плавность движения задаётся через параметр easing.
Горизонтальная прокрутка особенно чувствительна к плавности, так как
глаз быстрее фиксирует резкие изменения по горизонтали. Примеры наиболее
часто используемых функций:
linear — равномерная скорость.easeInOutCubic — медленное начало и конец, быстрый
середина.easeOutQuart — ускорение в начале, плавная
остановка.const scroll = new SmoothScroll('.scroll-link', {
direction: 'horizontal',
speed: 1000,
easing: 'easeOutQuart'
});
Если содержимое контейнера изменяется динамически, важно вызывать метод пересчета размеров:
scroll.update();
Это гарантирует, что новые секции будут корректно учтены в расчете горизонтальной позиции.
Smooth Scroll предоставляет API для прямого управления:
animateScroll(target, options) — плавная прокрутка к
целевому элементу.update() — обновление размеров контейнеров и
элементов.cancelScroll() — прерывание текущей анимации.// Прерывание анимации при клике на кнопку "Стоп"
document.querySelector('.stop-btn').addEventListener('click', () => {
scroll.cancelScroll();
});
Для мобильных экранов важно учитывать «инерционное» поведение. Smooth Scroll совместим с тач-событиями и корректно обрабатывает жесты свайпа. Однако при использовании кастомных кривых анимации следует тестировать скорость, чтобы пользователь ощущал плавность, а не резкость прокрутки.
Smooth Scroll отлично работает с CSS-свойством
scroll-snap-type для «прилипания» к секциям:
.scroll-container {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
}
.scroll-section {
flex: 0 0 300px;
scroll-snap-align: start;
}
В комбинации с библиотекой это позволяет плавно прокручивать контент с эффектом «прилипания» к каждому элементу.
Можно управлять несколькими горизонтальными контейнерами одновременно. Для этого создается отдельный экземпляр Smooth Scroll для каждого контейнера:
const galleryScroll = new SmoothScroll('.gallery-link', { direction: 'horizontal' });
const timelineScroll = new SmoothScroll('.timeline-link', { direction: 'horizontal' });
Каждый экземпляр независимо вычисляет позиции своих целевых элементов, что обеспечивает гибкость при сложных интерфейсах.
animateScroll, update,
cancelScroll).scroll-snap-type и
flex для корректного позиционирования.Горизонтальная прокрутка с Smooth Scroll позволяет создавать интерфейсы высокого уровня, обеспечивая удобство и визуальное удовольствие пользователям.