Навигация в fullPage.js строится вокруг концепции секций
(sections) и слайдов (slides). Библиотека
автоматически создает систему перемещения между этими блоками с
помощью:
Кастомизация навигации позволяет изменить как внешний вид, так и поведение этих элементов.
По умолчанию fullPage.js предоставляет вертикальную панель навигации в виде точек справа.
new fullpage('#fullpage', {
navigation: true,
navigationPosition: 'right',
navigationTooltips: ['Первая', 'Вторая', 'Третья'],
showActiveTooltip: true
});
navigation — включает отображение точекnavigationPosition — положение (left или
right)navigationTooltips — массив подсказокshowActiveTooltip — отображение подсказки активной
секцииfullPage.js добавляет DOM-структуру:
<div id="fp-nav">
<ul>
<li><a href="#"><span></span></a></li>
</ul>
</div>
#fp-nav ul li a span {
background: #999;
width: 8px;
height: 8px;
border-radius: 50%;
transition: all 0.3s ease;
}
#fp-nav ul li a.active span {
background: #ff5722;
transform: scale(1.5);
}
#fp-nav ul li a span {
border: 2px solid transparent;
}
#fp-nav ul li a:hover span {
border-color: #fff;
}
Встроенные точки можно отключить и реализовать собственную систему.
new fullpage('#fullpage', {
navigation: false
});
<nav class="custom-nav">
<a href="#section1">1</a>
<a href="#section2">2</a>
<a href="#section3">3</a>
</nav>
new fullpage('#fullpage', {
anchors: ['section1', 'section2', 'section3']
});
.custom-nav {
position: fixed;
top: 50%;
left: 20px;
transform: translateY(-50%);
}
.custom-nav a {
display: block;
margin: 10px 0;
color: white;
text-decoration: none;
}
Якоря позволяют синхронизировать URL и навигацию.
new fullpage('#fullpage', {
anchors: ['home', 'about', 'contacts'],
lockAnchors: false
});
fullPage.js поддерживает связывание с пользовательским меню.
<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>
new fullpage('#fullpage', {
menu: '#menu',
anchors: ['home', 'about', 'contact']
});
fullPage.js автоматически добавляет класс active:
#menu li.active a {
color: red;
}
new fullpage('#fullpage', {
scrollingSpeed: 1000,
easing: 'easeInOutCubic',
autoScrolling: true,
fitToSection: true
});
new fullpage('#fullpage', {
loopTop: false,
loopBottom: false,
keyboardScrolling: false
});
Навигацию можно полностью контролировать программно.
fullpage_api.moveTo(2);
fullpage_api.moveTo('about');
fullpage_api.moveSectionDown();
fullpage_api.moveSectionUp();
fullpage_api.moveSlideRight();
fullpage_api.moveSlideLeft();
fullPage.js предоставляет хуки для отслеживания переходов.
new fullpage('#fullpage', {
afterLoad: function(origin, destination, direction){
console.log('Текущая секция:', destination.index);
}
});
new fullpage('#fullpage', {
onLeave: function(origin, destination, direction){
if(destination.index === 2){
console.log('Переход к третьей секции');
}
}
});
Вместо точек можно реализовать прогресс-бар.
<div class="progress-bar"></div>
.progress-bar {
position: fixed;
top: 0;
left: 0;
height: 4px;
background: red;
width: 0%;
transition: width 0.3s;
}
new fullpage('#fullpage', {
afterLoad: function(origin, destination){
const total = document.querySelectorAll('.section').length;
const percent = ((destination.index + 1) / total) * 100;
document.querySelector('.progress-bar').style.width = percent + '%';
}
});
<div class="section">
<div class="slide">Слайд 1</div>
<div class="slide">Слайд 2</div>
</div>
new fullpage('#fullpage', {
controlArrows: true,
slidesNavigation: true,
slidesNavPosition: 'bottom'
});
.fp-controlArrow {
border-color: transparent transparent transparent #fff;
}
<button id="next">Вперед</button>
<button id="prev">Назад</button>
document.getElementById('next').oncl ick = () => {
fullpage_api.moveSectionDown();
};
document.getElementById('prev').oncl ick = () => {
fullpage_api.moveSectionUp();
};
Навигация может реагировать на текущую секцию.
new fullpage('#fullpage', {
afterLoad: function(origin, destination){
document.body.setAttribute('data-section', destination.index);
}
});
body[data-section="1"] .custom-nav {
opacity: 0.5;
}
new fullpage('#fullpage', {
responsiveWidth: 768
});
@media (max-width: 768px) {
#fp-nav {
display: none;
}
}
Навигацию можно менять во время выполнения.
fullpage_api.addSection('<div class="section">Новая</div>');
fullpage_api.reBuild();
new fullpage('#fullpage', {
navigation: true,
navigationTooltips: ['A', 'B', 'C'],
css3: true
});
body.dark-theme #fp-nav ul li a span {
background: #fff;
}
document.querySelectorAll('#fp-nav a').forEach((el, index) => {
el.setAttribute('aria-label', 'Перейти к секции ' + (index + 1));
});
afterLoad: function(origin, destination){
document.querySelector('.section.active').focus();
}
Навигация может управлять другими элементами интерфейса.
afterLoad: function(origin, destination){
document.querySelectorAll('.tab').forEach(tab => tab.classList.remove('active'));
document.querySelector(`.tab[data-index="${destination.index}"]`).classList.add('active');
}
Оптимальный подход — объединение:
new fullpage('#fullpage', {
navigation: true,
menu: '#menu',
anchors: ['home', 'about', 'contact'],
slidesNavigation: true
});
Это позволяет создать гибкую и масштабируемую систему управления страницей, полностью адаптированную под дизайн и пользовательский сценарий.