Глубокие ссылки и роутинг

Глубокие ссылки (deep linking) позволяют напрямую открывать конкретную секцию или слайд страницы через URL. В контексте fullPage.js это достигается за счёт синхронизации состояния интерфейса с хэшем в адресной строке браузера.

Каждой секции и слайду может быть назначен уникальный якорь (anchor), который становится частью URL:

https://example.com/#section2
https://example.com/#section2/slide3

Такой подход обеспечивает:

  • прямой доступ к нужному контенту
  • корректную работу кнопок «назад» и «вперёд»
  • возможность делиться ссылками на конкретные состояния страницы

Настройка якорей (anchors)

Для работы глубоких ссылок используется параметр anchors:

new fullpage('#fullpage', {
  anchors: ['firstPage', 'secondPage', 'thirdPage']
});

HTML-структура:

<div id="fullpage">
  <div class="section">...</div>
  <div class="section">...</div>
  <div class="section">...</div>
</div>

Соответствие происходит по порядку. При переходе ко второй секции URL станет:

#secondPage

Якоря для слайдов

Слайды внутри секций также могут иметь собственные якоря через параметр slidesNavigation и anchors в массиве:

new fullpage('#fullpage', {
  anchors: ['firstPage', 'secondPage'],
  slidesNavigation: true
});

Для задания якорей слайдам используется атрибут data-anchor:

<div class="section" data-anchor="secondPage">
  <div class="slide" data-anchor="slide1"></div>
  <div class="slide" data-anchor="slide2"></div>
</div>

URL будет выглядеть так:

#secondPage/slide2

Управление хэшем: опция lockAnchors

По умолчанию fullPage.js изменяет URL при прокрутке. Это поведение можно отключить:

new fullpage('#fullpage', {
  lockAnchors: true
});

При включённой опции:

  • URL не меняется при переходах
  • глубокие ссылки становятся неактивными
  • навигация остаётся только внутренней

Используется в случаях, когда:

  • требуется строгий контроль над роутингом
  • URL управляется сторонним механизмом

Навигация через API

Переход к секциям и слайдам программно:

fullpage_api.moveTo('secondPage');
fullpage_api.moveTo('secondPage', 'slide2');

Переход по индексу:

fullpage_api.moveTo(2); // вторая секция

Важно: при использовании якорей рекомендуется всегда обращаться именно к ним, а не к индексам, чтобы избежать ошибок при изменении структуры.


События и синхронизация состояния

Для интеграции с роутингом используются события:

new fullpage('#fullpage', {
  afterLoad: function(origin, destination, direction) {
    console.log(destination.anchor);
  }
});

Доступные данные:

  • origin — предыдущая секция
  • destination — текущая секция
  • destination.anchor — имя якоря
  • destination.index — индекс

Это позволяет:

  • синхронизировать состояние приложения
  • обновлять UI (меню, заголовки)
  • отправлять аналитику

Интеграция с History API

Для более сложного роутинга используется history.pushState:

new fullpage('#fullpage', {
  afterLoad: function(origin, destination) {
    history.pushState(null, null, '#' + destination.anchor);
  }
});

Преимущества:

  • полный контроль над URL
  • возможность использовать query-параметры
  • интеграция с SPA-фреймворками

Обработка загрузки страницы по якорю

При загрузке страницы fullPage.js автоматически анализирует URL и переходит к соответствующей секции.

Пример:

https://example.com/#thirdPage

Инициализация:

new fullpage('#fullpage', {
  anchors: ['firstPage', 'secondPage', 'thirdPage']
});

Страница откроется сразу на третьей секции.

Если якорь не найден:

  • открывается первая секция
  • ошибки не возникает

Параметр recordHistory

Контролирует добавление состояний в историю браузера:

new fullpage('#fullpage', {
  recordHistory: false
});

Поведение:

  • true (по умолчанию): каждое изменение добавляется в историю
  • false: URL обновляется, но история не засоряется

Используется, когда:

  • важно ограничить количество записей в истории
  • переходы должны быть «прозрачными»

Работа с меню и якорями

Связывание меню с секциями:

new fullpage('#fullpage', {
  anchors: ['home', 'about', 'contact'],
  menu: '#menu'
});

HTML:

<ul id="menu">
  <li data-menuanchor="home"><a href="#home">Главная</a></li>
  <li data-menuanchor="about"><a href="#about">О нас</a></li>
  <li data-menuanchor="contact"><a href="#contact">Контакты</a></li>
</ul>

Преимущества:

  • автоматическое обновление активного пункта
  • синхронизация с прокруткой
  • корректная работа глубоких ссылок

Конфликты с внешними роутерами

При использовании SPA-фреймворков (React, Vue, Angular) возможны конфликты:

  • оба механизма пытаются управлять URL
  • потеря состояния при переходах
  • дублирование истории

Решения:

1. Отключение управления URL в fullPage.js:

lockAnchors: true

2. Полная передача контроля роутеру:

  • fullPage используется только как визуальный слой
  • навигация происходит через роутер

3. Гибридный подход:

  • fullPage управляет секциями
  • роутер отслеживает изменения через события

Обработка кнопки «Назад»

При включённом recordHistory:

  • кнопка «назад» возвращает к предыдущей секции
  • состояние полностью синхронизировано

При отключённом:

  • переход происходит сразу к предыдущей странице браузера
  • навигация внутри fullPage игнорируется

Для кастомной логики:

window.addEventListener('popstate', function() {
  // обработка возврата
});

Ограничения и особенности

  • Якоря должны быть уникальными
  • Не допускаются пробелы и специальные символы
  • Изменение порядка секций требует обновления массива anchors
  • При динамическом добавлении секций требуется реинициализация

Динамическое изменение якорей

При изменении структуры DOM:

fullpage_api.destroy('all');

new fullpage('#fullpage', {
  anchors: ['new1', 'new2', 'new3']
});

Важно:

  • старые якоря перестают работать
  • требуется обновление ссылок и меню

Практические сценарии использования

1. Лендинги с отдельными разделами:

  • каждая секция имеет уникальный URL
  • удобно для маркетинга и аналитики

2. Документация:

  • быстрый переход к разделам
  • возможность делиться ссылками

3. Презентации:

  • управление слайдами через URL
  • поддержка навигации назад/вперёд

4. SPA-приложения:

  • комбинирование с клиентским роутингом
  • управление состоянием через события

Производительность и SEO

Особенности:

  • контент загружается сразу, но отображается частями
  • поисковые системы могут индексировать якоря
  • рекомендуется дублировать критичный контент вне fullPage при необходимости

Для улучшения SEO:

  • использовать серверный рендеринг
  • обеспечивать доступность контента без JavaScript
  • избегать критической зависимости от якорей

Типичные ошибки

Несоответствие anchors и секций:

anchors: ['one', 'two'] // но 3 секции

Дублирование якорей:

<div data-anchor="page"></div>
<div data-anchor="page"></div>

Использование индексов вместо якорей:

  • ломается при изменении структуры

Конфликты с роутером:

  • двойное управление URL

Рекомендации по архитектуре

  • всегда использовать осмысленные якоря (about, services, contact)
  • отделять логику роутинга от UI
  • централизовать управление навигацией
  • тестировать поведение при прямом открытии URL
  • учитывать работу кнопок браузера

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