Smooth Scroll предоставляет встроенные возможности для работы с навигацией и историей браузера. Это позволяет пользователю не только плавно перемещаться по странице, но и корректно управлять URL, обеспечивая поддержку кнопок «назад» и «вперед», а также прямых ссылок на определённые секции.
Для синхронизации с историей ключевым является параметр
updateURL. Если он установлен в true, Smooth
Scroll будет автоматически изменять URL в адресной строке при переходе к
определённой секции:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 800,
updateURL: true
});
В этом примере каждый клик по ссылке с хешем (#section1,
#contact) приведёт к плавной прокрутке и одновременному
обновлению URL. При этом создаётся новая запись в истории браузера, что
позволяет использовать кнопки навигации.
Особенности работы с updateURL:
pushState)
происходит только при навигации по ссылкам Smooth Scroll.id).Smooth Scroll предоставляет API для отслеживания изменения URL и выполнения действий при возврате по истории:
document.addEventListener('scrollStart', function(event) {
console.log('Началась прокрутка к секции:', event.target);
});
document.addEventListener('scrollStop', function(event) {
console.log('Прокрутка завершена на секции:', event.target);
});
При возврате пользователя назад (popstate) Smooth Scroll
автоматически инициирует плавный скролл к соответствующему элементу,
если хеш присутствует в URL. Для расширенной обработки можно подключить
событие popstate вручную:
window.addEventListener('popstate', function(event) {
const hash = window.location.hash;
if (hash) {
scroll.animateScroll(document.querySelector(hash));
}
});
Этот подход полезен, если требуется интеграция с другими библиотеками, например, для подгрузки динамического контента при смене секции.
При работе с динамически созданными ссылками важно инициализировать Smooth Scroll после добавления элементов в DOM:
function initDynamicLinks() {
const dynamicLinks = document.querySelectorAll('.dynamic-link');
dynamicLinks.forEach(link => scroll.addLink(link));
}
Метод addLink позволяет добавить обработку к новым
ссылкам без необходимости полной реинициализации объекта Smooth
Scroll.
Библиотека поддерживает дополнительные опции для более точного управления историей:
history: true | false – включение полной поддержки
History API.updateURL: true | false – обновление URL при
скролле.popstate: true | false – автоматическая обработка
возврата по истории.Пример конфигурации с полной синхронизацией:
const scroll = new SmoothScroll('a[href*="#"]', {
speed: 600,
updateURL: true,
history: true,
popstate: true
});
В этой конфигурации все переходы по ссылкам с хешами обновляют URL, создают записи истории и корректно обрабатывают возврат назад без дополнительного кода.
Для правильной синхронизации необходимо, чтобы элементы имели
уникальные id. Если несколько элементов имеют одинаковый
идентификатор, Smooth Scroll прокрутит к первому найденному.
<section id="about"></section>
<section id="services"></section>
<section id="contact"></section>
При клике на <a href="#services"> произойдёт
плавный скролл к секции с id="services", а URL обновится на
example.com/#services.
Если на странице используются другие скрипты, изменяющие URL, важно
управлять приоритетами событий popstate и
hashchange. Smooth Scroll корректно интегрируется,
если:
window.addEventListener
без отмены действий по умолчанию.scrollTo и
animateScroll, чтобы избежать конфликтов плавной
анимации.Синхронизация с историей обеспечивает полноценную поддержку навигации на странице с плавной прокруткой. Smooth Scroll позволяет обновлять URL, обрабатывать возврат назад и интегрироваться с динамическими элементами, сохраняя корректность истории браузера и удобство пользователя.