Smooth Scroll позволяет создавать плавную прокрутку к элементам
страницы, используя якорные ссылки с хешами в URL. Хеш
(#id) указывает на конкретный элемент с атрибутом
id на странице и является ключевым для навигации и
управления скроллингом.
Для того чтобы Smooth Scroll реагировал на ссылки с хешами,
достаточно инициализировать библиотеку с селектором ссылок, содержащих
#. Пример базовой инициализации:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
speedAsDuration: true,
offset: 0,
updateURL: true,
});
Пояснения параметров:
speed — длительность анимации в миллисекундах.speedAsDuration — если true, скорость
прокрутки будет постоянной, а не зависеть от расстояния до цели.offset — смещение от верха страницы для точной
настройки позиции прокрутки (полезно при фиксированных шапках).updateURL — если true, браузер будет
обновлять хеш в адресной строке при прокрутке.Smooth Scroll автоматически перехватывает клики по ссылкам с хешами,
но для программного управления можно вызвать метод
animateScroll:
const targetElement = document.querySelector('#section3');
scroll.animateScroll(targetElement);
Дополнительно можно передавать объект с опциями:
scroll.animateScroll(targetElement, null, {
speed: 800,
offset: 50,
});
Если пользователь открывает страницу с уже заданным хешем, Smooth
Scroll позволяет автоматически прокручивать к соответствующему элементу.
Для этого используют метод animateScroll при событии
DOMContentLoaded:
document.addEventListener('DOMContentLoaded', () => {
const hash = window.location.hash;
if (hash) {
const target = document.querySelector(hash);
if (target) {
scroll.animateScroll(target);
}
}
});
Такой подход исключает резкий «прыжок» к элементу и обеспечивает плавный скролл при загрузке страницы с URL, содержащим хеш.
Библиотека Smooth Scroll может автоматически менять хеш в адресной
строке при прокрутке. Параметр updateURL отвечает за это.
Если необходимо вручную изменить хеш без резкой прокрутки, используется
метод setHash:
scroll.setHash('#section2');
Это особенно полезно для интеграции с системами навигации или для логирования текущего положения на странице.
При наличии фиксированной шапки важно учитывать ее высоту, чтобы
целевой элемент не оказался скрыт под ней. Опция offset
позволяет задать смещение:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 700,
offset: 100,
});
Также можно динамически вычислять высоту шапки:
const headerHeight = document.querySelector('.header').offsetHeight;
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 700,
offset: headerHeight,
});
Для страниц с множеством хешей иногда необходимо ограничить область
действия Smooth Scroll. Для этого используют селекторы по классу или по
атрибуту data-scroll:
const scroll = new SmoothScroll('a[data-scroll]', {
speed: 600,
offset: 50,
});
Ссылки без атрибута data-scroll не будут перехватываться
библиотекой, что предотвращает конфликт с другими навигационными
скриптами.
Перед прокруткой рекомендуется проверять наличие элемента, на который указывает хеш:
const hash = '#nonexistent';
const target = document.querySelector(hash);
if (target) {
scroll.animateScroll(target);
} else {
console.warn(`Элемент с id ${hash} не найден`);
}
Это предотвращает ошибки при кликах по битым ссылкам или при динамически подгружаемом контенте.
Для современных SPA часто используется history.pushState
или history.replaceState для изменения URL без
перезагрузки. Smooth Scroll можно интегрировать с этим подходом:
window.addEventListener('popstate', () => {
const hash = window.location.hash;
if (hash) {
const target = document.querySelector(hash);
if (target) scroll.animateScroll(target);
}
});
Это обеспечивает синхронизацию прокрутки с браузерной историей и плавное перемещение при навигации назад/вперед.
Плавная работа с хешами в URL требует правильной инициализации, обработки существующих и динамически изменяемых хешей, учета фиксированных элементов и интеграции с браузерной историей. Использование возможностей Smooth Scroll позволяет создавать удобную, интерактивную навигацию с точным контролем прокрутки и обновления URL.