Smooth scroll

Smooth scroll в Unpoly обеспечивает плавный переход к целевым фрагментам страницы без резкого скачка, что повышает читаемость и сглаживает смену контекста при навигации. Механизм интегрируется с системой обновления фрагментов и ссылками, обеспечивая единообразное поведение во всех ключевых сценариях.

Unpoly отслеживает клики по ссылкам и выполняет обновление части документа с помощью up.link.follow. Если обновление фрагмента включает в себя позицию прокрутки, библиотека может автоматически выполнить плавный скролл к нужному элементу или вернуться к верхней части слоя.

Плавность достигается благодаря упорядоченному сочетанию:

  • определения целевой позиции прокрутки;
  • задержки до начала анимации (для завершения рендера фрагмента);
  • настройки продолжительности и функции сглаживания.

Управление прокруткой при навигации

По умолчанию Unpoly стремится прокручивать к началу обновлённого фрагмента. Поведение регулируется с помощью атрибутов ссылок и опций up.link:

Ключевые атрибуты:

  • up-scroll: управляет направлением и логикой прокрутки;
  • up-restore-scroll: восстанавливает предыдущую позицию прокрутки при возврате;
  • up-history: контролирует запись состояния прокрутки в историю.

Типичные стратегии:

  • переход к началу содержимого после загрузки нового фрагмента;
  • возврат в ранее запомненную позицию;
  • отсутствие движения при динамических обновлениях интерфейса.

Прокрутка к элементам

Unpoly предоставляет API для прямой прокрутки к элементам, минуя механизмы ссылок. Команда up.scroll.to принимает селектор или DOM-узел и двигает область просмотра к нему.

Пример ключевых особенностей:

  • автоматическое определение нужного скролл-контейнера;
  • корректная работа внутри вложенных слоёв;
  • синхронизация с обработкой фокуса.

Поддерживается выбор продолжительности, функции сглаживания и отступа, что полезно при фиксированных верхних панелях.

Синхронизация со слоями

При открытии нового слоя (modal, drawer, overlay) скролл остаётся локальным для данного слоя. Вложенные слои могут содержать собственные позиции прокрутки и правила работы со скроллом. Важно учитывать, что закрытие слоя восстанавливает предыдущее состояние прокрутки родителя при включённом up-restore-scroll.

Smooth scroll и история браузера

Современные приложения требуют корректного восстановления состояния интерфейса при перемещении по истории браузера. Unpoly автоматически сохраняет позицию прокрутки в стек истории, если действие изменяет URL. Возврат назад вызывает восстановление позиции при условии, что обновляется тот же слой без сброса содержимого.

Особенности механизма:

  • позиция привязывается к записи истории;
  • не сохраняется при отключенном up-history;
  • учитывает вложенные слои и их контекст.

Анимация и пользовательские параметры

Плавность прокрутки можно настроить глобально через конфигурацию или точечно при вызове API. Конфигурация определяет базовое поведение, включая:

  • длительность анимации;
  • функцию кривой ускорения/замедления;
  • задержку перед стартом скролла.

При необходимости анимация может быть отключена для системных переходов, что улучшает доступность для пользователей с ограничениями по движению интерфейса.

Обработка фиксированных элементов

Интерфейсы часто используют фиксированные верхние панели, которые перекрывают часть контента. Unpoly позволяет задавать отступ при прокрутке, чтобы целевой элемент не оказался зафиксирован под панелью. Этот отступ может быть статическим или вычисляться динамически при загрузке фрагмента.

Взаимодействие с фокусом

Перемещение фокуса в Unpoly нередко сопровождается прокруткой, особенно при загрузке форм. Smooth scroll в этих сценариях синхронизирует прокрутку и фокусировку элемента, избегая резких скачков и не нарушая процесс ввода.

Плавность в сочетании с частичной перезагрузкой

Smooth scroll органично работает с инкрементальными обновлениями фрагментов. Если перезагружается только часть документа, Unpoly корректно определяет локальное окно прокрутки и выбирает минимально необходимое смещение. Это предотвращает ненужные прыжки даже при больших объёмах динамического контента.

Особенности для длинных страниц

На длинных страницах Unpoly избегает преждевременного скролла до момента, когда новый фрагмент полностью готов и вставлен. Этот приём предотвращает ситуацию, когда браузер прокручивает в промежуточную позицию до завершения рендера. Дополнительно учитываются возможные изменения высоты документа после вставки интерактивных компонентов.

Контроль над поведением

Поведение smooth scroll может быть переопределено в зависимости от контекста. Ключевые параметры:

  • отключение прокрутки для быстрых навигационных элементов;
  • принудительная прокрутка для якорных ссылок;
  • восстановление прокрутки при повторных переходах;
  • выбор слоёв, в которых прокрутка применима.

Гибкий контроль позволяет выстраивать единообразные паттерны в интерфейсах независимо от количества слоёв, динамических компонентов и способов навигации.

Доступность и предпочтения пользователей

Unpoly учитывает системные настройки prefers-reduced-motion и отключает анимацию скролла для пользователей, которые предпочитают минимальные движения интерфейса. Это снижает нагрузку на пользователей с повышенной чувствительностью к анимациям и соответствует требованиям по доступности.

Интеграция с якорями и URL

Плавная прокрутка поддерживается при переходах по якорям внутри страницы и при загрузке новых фрагментов, указывающих якорь в URL. Такие переходы корректно работают в сочетании с историей браузера и вложенными слоями.

Применение в SPA-подобных интерфейсах

Smooth scroll становится особенно ценным в интерфейсах, приближенных к SPA, когда множество переходов не сопровождаются полной перезагрузкой документа. Последовательная прокрутка поддерживает ощущение структурно связанного контента и помогает ориентироваться на странице без избыточных визуальных сигналов.

Итоговые свойства механизма smooth scroll в Unpoly

  • плавная и предсказуемая навигация по контенту;
  • консистентность поведения во всех слоях;
  • учёт истории браузера и предпочтений пользователя;
  • контроль над отступами, длительностью и контекстом;
  • корректная работа с частичными обновлениями и фокусом;
  • бесшовная интеграция с якорями и восстановлением состояния.

Smooth scroll выступает не как декоративная анимация, а как функциональный элемент управления вниманием и контекстом при работе с динамическими страницами.