Для интеграции fullPage.js в проект на Vue.js необходимо выполнить несколько ключевых шагов. Начать следует с установки библиотеки через npm:
npm install fullpage.js
После этого можно подключить стили в главный файл приложения,
например main.js или App.vue:
import 'fullpage.js/dist/fullpage.css';
import fullpage from 'fullpage.js';
Полезно обернуть fullPage.js в отдельный компонент для удобного управления жизненным циклом и предотвращения конфликтов с Vue-реактивностью.
<template>
<div id="fullpage">
<div class="section" v-for="(section, index) in sections" :key="index">
<h1>{{ section.title }}</h1>
<p>{{ section.content }}</p>
</div>
</div>
</template>
<script>
import fullpage from 'fullpage.js';
import 'fullpage.js/dist/fullpage.css';
export default {
name: 'FullpageWrapper',
data() {
return {
fpInstance: null,
sections: [
{ title: 'Раздел 1', content: 'Содержимое первого раздела' },
{ title: 'Раздел 2', content: 'Содержимое второго раздела' },
{ title: 'Раздел 3', content: 'Содержимое третьего раздела' },
]
};
},
mounted() {
this.fpInstance = new fullpage('#fullpage', {
navigation: true,
navigationPosition: 'right',
scrollingSpeed: 700,
loopBottom: true,
licenseKey: 'YOUR_KEY_HERE'
});
},
beforeUnmount() {
if (this.fpInstance) {
this.fpInstance.destroy('all');
this.fpInstance = null;
}
}
};
</script>
<style scoped>
.section {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
height: 100vh;
}
</style>
Ключевые моменты:
mounted,
чтобы гарантировать доступ к DOM-элементам.beforeUnmount позволяет корректно
уничтожать экземпляр fullPage.js и освобождать ресурсы.v-for,
чтобы Vue управлял их обновлением.FullPage.js предоставляет множество опций, которые полностью совместимы с Vue-компонентом:
navigation — отображение навигационных точек.scrollingSpeed — скорость прокрутки между
секциями.loopBottom и loopTop — зацикливание
прокрутки.anchors — якоря для URL, чтобы можно было переходить к
конкретной секции через #anchor.Пример использования якорей:
this.fpInstance = new fullpage('#fullpage', {
anchors: ['first', 'second', 'third'],
navigation: true,
scrollingSpeed: 700
});
Теперь переход к секции можно осуществлять через URL:
/#second.
Чтобы обновлять секции динамически после создания компонента, можно
использовать метод fullpage_api.reBuild() или удалять и
пересоздавать экземпляр fullPage.js.
this.sections.push({ title: 'Новая секция', content: 'Динамически добавленная секция' });
this.$nextTick(() => {
this.fpInstance.reBuild();
});
$nextTick гарантирует, что DOM уже обновлён, прежде чем
fullPage.js пересчитает высоты и позиции.
FullPage.js предоставляет колбэки, которые отлично интегрируются с Vue:
afterLoad(origin, destination, direction) — вызывается
после загрузки секции.onLeave(origin, destination, direction) — перед
переходом на следующую секцию.afterRender() — после полной инициализации
страницы.Пример с Vue:
this.fpInstance = new fullpage('#fullpage', {
navigation: true,
afterLoad: (origin, destination) => {
console.log(`Перешли из ${origin.index} в ${destination.index}`);
},
onLeave: (origin, destination, direction) => {
console.log(`Покидаем секцию ${origin.index} в направлении ${direction}`);
}
});
При использовании Vue Router рекомендуется инициализировать fullPage.js только на страницах, где требуется полный экран. Для этого можно использовать динамический импорт компонента с fullPage.js:
const FullpagePage = () => import('@/components/FullpageWrapper.vue');
const routes = [
{ path: '/fullpage', component: FullpagePage }
];
Также можно использовать якоря для перехода между секциями и синхронизации с маршрутизатором:
this.fpInstance.setActiveAnchor('second');
this.$router.push({ hash: '#second' });
FullPage.js поддерживает адаптивные настройки через опцию
responsiveWidth и responsiveHeight. Это
позволяет отключить прокрутку fullPage на мобильных устройствах:
this.fpInstance = new fullpage('#fullpage', {
responsiveWidth: 768,
responsiveHeight: 600
});
Если ширина окна меньше 768px или высота меньше 600px, прокрутка секций будет отключена, и контент отобразится как обычная страница.
FullPage.js совместим с анимациями и динамическим контентом. Для плавного перехода можно использовать Vue Transition внутри секций:
<div class="section">
<transition name="fade">
<p v-if="showContent">Контент с анимацией</p>
</transition>
</div>
При смене секции fullPage.js не мешает работе Vue Transition, если инициализация и обновление DOM происходят корректно.
mounted и
уничтожать в beforeUnmount.v-for и $nextTick для
динамических секций.Полная интеграция fullPage.js с Vue.js позволяет создавать проекты с плавной вертикальной прокруткой, интерактивными секциями и динамическим контентом, полностью сохраняя реактивность и возможности экосистемы Vue.