- Главная
- Проекты на Vue
- Анимированная навигация
Анимированная навигация
Создание плавной и интерактивной навигации — одна из ключевых задач современного фронтенда. С помощью фреймворка Vue.js такие компоненты реализуются элегантно и с минимальным количеством кода. Реактивность Vue позволяет легко управлять состоянием интерфейса (например, открытием/закрытием меню), а система привязки классов и стилей делает анимации простыми и декларативными.
Компонент ниже наглядно демонстрирует, как Vue упрощает разработку сложного интерактивного поведения.
Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.
Подробный разбор кода компонента
Давайте детально разберем, как устроен этот компонент.
HTML-структура (Vue Template)
<nav class="app__nav">: Основной контейнер навигации. Классshrinkedуправляет уменьшением отступаgapмежду меню и кнопкой-бургером при сворачивании.<div class="app__menu">: Контейнер для пунктов меню. Ключевая логика анимации скрытия/раскрытия реализована здесь через CSS Grid. Классexpandedпереключаетgrid-template-columnsс0frна1fr, создавая плавное анимируемое схлопывание и расширение.<a class="app__menu-item">: Ссылки-пункты меню. Генерируются директивойv-forиз массиваitems. Классhideплавно изменяет их прозрачностьopacityпри сворачивании.<div class="app__burger">: Кнопка-бургер для переключения состояния. Обработчик@clickинвертирует булево значение реактивной переменнойisExpanded— сердце логики компонента.
CSS-стили
- Адаптивность: Для анимации переключается свойство
grid-template-rows. - Анимации: Все переходы управляются CSS-переменной
--tr(transition), задающей длительность и функцию плавностиease-in-out. Это обеспечивает согласованность анимаций. - Бургер-иконка: Превращение крестика в две линии (и обратно) реализовано через трансформации
transform: rotateдвух псевдоэлементов.app__burger-line.upи.down. Класс.rotateменяет их положение и вращение.
Логика на Vue.js (Composition API)
const isExpanded = ref(true): Реактивная переменная, хранящая состояние меню (открыто/закрыто). Является «единым источником истины» для всех анимаций.const items = ref(['Дом','Портфолио','О нас','Контакты']): Реактивный массив данных для пунктов меню. Для добавления или переименования пунктов достаточно изменить только этот массив.- Связь шаблона и логики: Состояние
isExpandedчерез директиву:classдинамически добавляет или убирает CSS-классы (expanded,shrinked,hide,rotate), запуская соответствующие анимации.
Этот компонент — лишь небольшая демонстрация того, как Vue.js помогает создавать живые, отзывчивые интерфейсы. Подобные решения делают пользовательский опыт значительно приятнее и современнее.
Готовы оживить ваш сайт?
Нужна уникальная анимированная навигация, сложный интерактивный элемент или целый креативный сайт? Наша веб-студия готова воплотить ваши идеи в код. Мы специализируемся на создании производительных, визуально притягательных и удобных веб-интерфейсов, которые решают бизнес-задачи и цепляют пользователей.
Давайте создадим что-то выдающееся вместе!