Другие JavaScript библиотеки

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 библиотека отслеживает навигацию назад/вперед.

Использование методов API

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 — вызывается после завершения анимации.

Кривые анимации и easing

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() предотвращает конфликт при повторном вызове анимации.
  • Минимизация длительности и offset ускоряет восприятие интерфейса на длинных страницах.

Smooth Scroll сочетает простоту использования с гибкой настройкой, что делает её эффективным инструментом для любой веб-страницы, требующей плавной прокрутки и контроля над якорями.