Smooth Scroll — это лёгкая библиотека для реализации плавной прокрутки в веб-приложениях на JavaScript. Помимо базовой функциональности, сообщество разработчиков создало множество расширений, которые позволяют адаптировать Smooth Scroll под различные задачи, ускорять разработку и повышать UX интерфейсов. Ниже рассмотрены наиболее популярные и полезные расширения с подробным описанием их возможностей и способов интеграции.
ScrollSpy расширяет Smooth Scroll возможностью отслеживания текущего видимого элемента на странице. Это полезно для динамических меню и навигационных панелей.
IntersectionObserver для
повышения производительности.import SmoothScroll from 'smooth-scroll';
import ScrollSpy from 'smooth-scroll/dist/scrollspy.min.js';
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
offset: 50
});
const spy = new ScrollSpy({
nav: '.menu a',
section: 'section',
activeClass: 'active',
offset: 50
});
Расширение Hash Management позволяет синхронизировать URL с текущей прокруткой, обеспечивая глубокие ссылки на отдельные секции.
#id).history.pushState и
history.replaceState.const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
updateURL: true,
popstate: true
});
Параметр updateURL: true автоматически добавляет хэш к
URL при скролле.
Smooth Scroll поддерживает встроенные easing-функции, но сообщество создало расширения для добавления кастомных кривых анимации.
easeInOutCubic, easeInQuad,
easeOutQuart.const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
easing: 'easeInOutCubic'
});
Для создания собственной кривой можно использовать функцию:
function customEasing(t) {
return t < 0.5 ? 4*t*t*t : 1 - Math.pow(-2*t + 2, 3)/2;
}
И передавать её через параметр easing: customEasing.
Расширение Callbacks позволяет выполнять пользовательские функции на ключевых этапах прокрутки: до начала, во время и после завершения.
before: вызывается перед началом скролла.after: вызывается после завершения анимации.cancel: срабатывает при отмене прокрутки
пользователем.const scroll = new SmoothScroll('a[href*="#"]', {
speed: 700,
before: (anchor, toggle) => {
console.log('Начало прокрутки к:', anchor);
},
after: (anchor, toggle) => {
console.log('Прокрутка завершена к:', anchor);
}
});
Некоторые расширения сообщества добавляют интеграцию с Lazy Loading изображений и элементов. Это позволяет плавной прокрутке корректно учитывать динамически загружаемый контент.
load и
DOMContentLoaded.document.addEventListener('lazyloaded', function(e){
scroll.update(); // обновление позиций после загрузки контента
});
Расширения для мобильных устройств улучшают отклик при таче и свайпе.
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
touch: true,
touchSensitivity: 0.8
});
Сообщество предоставило готовые адаптации Smooth Scroll для популярных фронтенд-фреймворков:
v-smooth-scroll с
настройкой скорости и easing.import { useSmoothScroll } from 'smooth-scroll-react';
function Menu() {
const scroll = useSmoothScroll({ speed: 500, offset: 60 });
return <a href="#section1" onCl ick={scroll}>Перейти к секции 1</a>;
}
Готовые расширения Smooth Scroll существенно упрощают создание сложной навигации и обеспечивают гибкую настройку поведения прокрутки, совместимость с мобильными устройствами и современными фронтенд-фреймворками, а также позволяют интегрировать динамический контент и управлять URL.