Работа с хешами в URL

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} не найден`);
}

Это предотвращает ошибки при кликах по битым ссылкам или при динамически подгружаемом контенте.

Анимация при изменении хеша через history API

Для современных 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.