Unpoly предоставляет механизмы для навигации по страницам без полной перезагрузки, сохраняя привычное поведение прокрутки к якорям. При загрузке фрагмента возможна автоматическая установка позиции прокрутки, а также тонкое управление поведением при переходах.
Якорем считается элемент с идентификатором (id), на
который ссылается навигация. В классическом подходе браузер прокручивает
документ после загрузки страницы. В Unpoly загрузка проходит асинхронно,
поэтому требуется координация между обновлённым фрагментом и поведением
прокрутки.
Важный момент: прокрутка выполняется только после завершения обновления соответствующего фрагмента. Если целевой элемент отсутствует в обновлённом DOM, прокрутка не происходит.
Переход up.link или up.navigate способен
автоматически обработать якорь, если URL содержит #hash.
Например:
/docs#section-api
Если section-api присутствует после обновления
фрагмента, Unpoly прокрутит к нему, используя метод
scrollIntoView() или собственный механизм.
Unpoly позволяет настраивать способ прокрутки и область обновления.
Настройки браузерной прокрутки
up.viewport.scroll — контролирует прокрутку внутри
viewport-фрагментов.up.fragment.scroll — задаёт прокрутку для конкретного
фрагмента.Эти методы позволяют не только двигать страницу, но и работать со вложенными контейнерами с прокруткой.
При частичном обновлении важно учитывать, что якорь может находиться в одном фрагменте, а навигация обновляет другой. В этом случае требуется либо расширить область обновления, либо перенаправить прокрутку вручную.
Примерный алгоритм Unpoly:
Unpoly синхронизирует состояние истории браузера и прокрутки. При переходе назад браузер ожидает, что позиция прокрутки будет восстановлена. Unpoly учитывает это и сохраняет состояние при навигации, тем самым избегая неожиданного позиционирования страницы.
Ключевой аспект: поддерживается привычная модель взаимодействия — переход вперёд приводит к новой прокрутке, назад — к восстановлению.
Для более точного контроля используются события и опции переходов:
scroll: false — отключает автопрокрутку.scroll: 'top' — фиксированная прокрутка к началу
контейнера.scroll: element — позиционирование относительно
указанного элемента.Пример в ссылках:
<a up-target=".content" up-scroll="false">...</a>
и в переходах:
up.navigate(url, { scroll: 'top' })
Если якорь появляется в DOM только после загрузки динамического содержимого, Unpoly выполнит прокрутку сразу после монтирования. Это особенно полезно в документации, каталогах и длинных списках, где пользователь обращается к конкретному фрагменту.
Unpoly поддерживает вложенные области прокрутки. Элемент с атрибутом
up-viewport становится контейнером для содержимого, внутри
которого возможны собственные якоря и собственная прокрутка. Это
позволяет создавать интерфейсы, напоминающие одностраничные приложения,
но без отказа от стандартной семантики URL.
Особенность nested viewport заключается в том, что якорь
сопоставляется только с теми фрагментами, которые доступы в его
пределах. Если целевой id находится за пределами viewport,
Unpoly не переключает уровень вложенности автоматически.
Проблемы могут возникать при следующих условиях:
id;В таких ситуациях требуется либо расширить область обновления, либо
выполнить ручную прокрутку с помощью up.scroll().
Unpoly не навязывает собственную анимацию прокрутки, но позволяет подключить её через пользовательские скрипты. Плавные переходы становятся естественным дополнением для интерфейсов с точечными навигациями и большим количеством якорей.
После выполнения перехода Unpoly обеспечивает согласованность:
Эти свойства позволяют использовать Unpoly для сложной документации и интерфейсов, где требуется частичная навигация без потери глубины структуры.