Аккордеон на Vue

Создание интерактивных интерфейсов, таких как аккордеоны, часто связано с управлением состоянием элементов, обработкой событий и динамическим изменением стилей. На чистом JavaScript это требует немало строк кода. Фреймворк Vue.js кардинально упрощает эту задачу, позволяя разработчику сосредоточиться на логике и дизайне, а не на рутинных манипуляциях с DOM. Благодаря реактивной системе данных и декларативному синтаксису, компонент аккордеона создается быстро, выглядит чисто и легко поддерживается.

Ниже вы можете увидеть и протестировать готовый компонент аккордеона, написанный на Composition API Vue 3. Он демонстрирует классический паттерн: клик по кнопке разворачивает либо сворачивает один пункт. А теперь — посмотрите, как это работает!

Софизмы

{{item.question}}

{{item.answer}}

Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.

Разбор реализации: как работает этот Vue-аккордеон

Давайте подробно разберем ключевые моменты кода, чтобы понять мощь и простоту Vue.

HTML (Шаблон)

  1. Реактивные данные items: Вся структура аккордеона построена на реактивном массиве items, который содержит объекты с вопросами, ответами и ключевым свойством isExpanded. Изменение этого свойства автоматически приводит к обновлению интерфейса.
  2. Декларативный рендеринг v-for: Директива v-for="item in items" генерирует HTML-структуру для каждого элемента массива. Это избавляет от ручного создания элементов в DOM.

Динамические классы и условия :class, v-show, v-if/v-else:

  1. :class="{expanded: item.isExpanded}" добавляет класс .expanded контейнеру пункта, если он открыт, позволяя применять специфичные стили (например, фон).
  2. v-show="item.isExpanded" управляет видимостью ответа и декоративной SVG-иконки. Это директива, которая просто переключает display: none.
  3. v-if и v-else на кнопке полностью меняют SVG-иконку с «плюса» на «крестик» в зависимости от состояния, обеспечивая наглядную обратную связь.

Обработка событий @click: Вся логика открытия/закрытия заключена в одну лаконичную строку: @click="item.isExpanded = !item.isExpanded". Vue самостоятельно отслеживает это изменение и перерисовывает только нужные части компонента.

CSS (Стили)

В стилях используются современные подходы: CSS-переменные --w, --tr для удобства, flexbox для выравнивания. Стили изолированы для данного компонента, что предотвращает конфликты.

Итог: Весь функционал аккордеона реализован в минимальном количестве строк кода. Vue берет на себя всю сложную работу по синхронизации данных и интерфейса.

Нужен уникальный и эффективный интерактив для вашего сайта?

Этот аккордеон — лишь маленький пример того, как современные технологии могут оживить ваш контент, улучшить пользовательский опыт и выделить сайт на фоне конкурентов.

Наша веб-студия специализируется на создании креативных, интерактивных сайтов и компонентов. От сложных анимированных интерфейсов на чистом JS и Vue.js до кастомных виджетов и динамических форм — мы воплотим в жизнь любую вашу идею.

Готовы сделать ваш сайт по-настоящему интерактивным? Свяжитесь с нами для обсуждения проекта!