Smooth Scroll — это легковесная библиотека JavaScript, предназначенная для реализации плавного перехода к якорям на странице. Она полностью управляется через JavaScript, не требует CSS-анимаций и позволяет создавать пользовательские эффекты прокрутки с высокой точностью.
Библиотека поддерживает следующие ключевые функции:
Smooth Scroll доступна через CDN, npm и локальное подключение.
Через CDN:
<script src="https://cdn.jsdelivr.net/npm/smooth-scroll@16/dist/smooth-scroll.polyfills.min.js"></script>
Через npm:
npm install smooth-scroll
После установки через npm библиотека подключается с помощью
import:
import SmoothScroll from 'smooth-scroll';
Для базовой инициализации достаточно создать объект SmoothScroll и передать селектор ссылок, которые будут плавно прокручиваться:
const scroll = new SmoothScroll('a[href*="#"]');
В этом примере все ссылки с атрибутом href, содержащим
#, будут автоматически прокручиваться плавно к
соответствующим элементам на странице.
Smooth Scroll позволяет гибко настраивать поведение через объект конфигурации:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800, // Длительность прокрутки в миллисекундах
offset: 50, // Смещение от верха страницы
easing: 'easeInOutCubic', // Тип кривой анимации
clip: true, // Ограничивает прокрутку до конца страницы
updateURL: false, // Не изменять URL при прокрутке
popstate: true, // Управление историей браузера
});
Основные параметры:
speed — длительность анимации прокрутки, число в
миллисекундах.offset — вертикальное смещение, учитывает фиксированные
шапки.easing — тип анимационной кривой (linear,
easeInOutCubic, easeOutQuart и др.).clip — при true прокрутка не будет
выходить за пределы страницы.updateURL — при true URL обновляется с
якорем.popstate — при true библиотека отслеживает
навигацию назад/вперед.Smooth Scroll предоставляет несколько методов для управления прокруткой программно:
scroll.animateScroll(target, toggle, options) —
запускает анимацию к целевому элементу.scroll.cancelScroll() — немедленно останавливает
текущую анимацию.scroll.getScrollOffset() — возвращает текущие смещения
страницы.Пример программного вызова:
const target = document.querySelector('#section2');
scroll.animateScroll(target, null, { speed: 1000, offset: 100 });
Коллбеки позволяют выполнять действия до и после завершения прокрутки:
const scroll = new SmoothScroll('a[href*="#"]', {
before: function(anchor, toggle) {
console.log('Начало прокрутки к элементу:', anchor);
},
after: function(anchor, toggle) {
console.log('Прокрутка завершена к элементу:', anchor);
}
});
before — вызывается перед началом анимации.after — вызывается после завершения анимации.Smooth Scroll поддерживает разнообразные функции easing, которые задают динамику движения:
linear — равномерная скорость.easeInQuad — ускорение в начале.easeOutCubic — замедление к концу.easeInOutQuart — плавное ускорение и замедление.Можно создавать свои пользовательские кривые, передавая функцию:
const scroll = new SmoothScroll('a[href*="#"]', {
easing: function(t, b, c, d) {
return c * (t /= d) * t + b; // Пример квадратичного easing
}
});
Если на странице есть фиксированные шапки или панели, можно
компенсировать их высоту через offset:
const scroll = new SmoothScroll('a[href*="#"]', {
offset: document.querySelector('.header').offsetHeight
});
Это гарантирует, что целевой элемент не будет перекрыт фиксированным меню после прокрутки.
Smooth Scroll легко сочетается с любыми SPA-фреймворками и
библиотеками анимаций, такими как GSAP или Anime.js, поскольку работает
через нативный requestAnimationFrame. Можно вызывать
прокрутку в рамках сложных цепочек анимаций или реактивных событий:
button.addEventListener('click', () => {
scroll.animateScroll(document.querySelector('#targetSection'));
});
null.cancelScroll() предотвращает конфликт при
повторном вызове анимации.Smooth Scroll сочетает простоту использования с гибкой настройкой, что делает её эффективным инструментом для любой веб-страницы, требующей плавной прокрутки и контроля над якорями.