Слайдер на Vue

Фреймворк Vue.js открыл новые возможности для создания интерактивных элементов, которые мгновенно реагируют на действия пользователя. Слайдер — один из ключевых элементов современного веб-сайта, и его реализация с помощью Vue становится невероятно простой. Реактивная система Vue позволяет управлять состоянием компонентов (например, активным слайдом) без необходимости прямого манипулирования DOM, что делает код чистым, логичным и легко поддерживаемым.

Убедитесь в этом сами: ниже представлен готовый интерактивный слайдер изображений, созданный на Vue 3. Кликните на любое фото, чтобы увидеть анимацию.

{{ photo.desc }}

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

Как работает этот Vue слайдер?

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

HTML (Шаблон компонента)

В шаблоне мы используем директиву v-for для отрисовки списка изображений из массива photos. Ключевые моменты:

  1. :class="{expanded: photo.isExpanded}" – Динамически добавляет CSS-класс expanded только к активному (раскрытому) слайду. Это сердце нашей анимации.
  2. @click="handleClick(index)" – Обрабатывает клик пользователя по слайду, передавая его индекс в метод.
  3. {{ photo.desc }} – Реактивно отображает подпись к изображению, которая берется из нашего массива данных.

CSS (Стилизация)

Стили обеспечивают плавные переходы и внешний вид:

  1. Контейнер .slider использует display: flex, чтобы слайды располагались в ряд.
  2. Изначально все слайды имеют одинаковый flex-grow (благодаря flex: 1 1).
  3. Класс .expanded резко увеличивает flex-grow активного слайда, заставляя его растягиваться, а остальные – сжиматься.
  4. Класс .slider__desc скрыт (opacity: 0) и появляется только у активного слайда. Плавность анимации обеспечивает transition: var(--tr).

JS (Логика на Vue 3 Composition API)

Логика компонента проста и сосредоточена в одном месте:

  1. Состояние: Мы используем реактивную ссылку const photos = ref(PHOTOS), которая хранит массив всех слайдов с их свойствами, включая флаг isExpanded.
  2. Метод handleClick: При клике на слайд этот метод обходит весь массив photos и устанавливает isExpanded: true только для выбранного слайда (по индексу), а для всех остальных – isExpanded: false.
  3. Реактивность Vue: Как только значение isExpanded меняется, Vue автоматически реагирует на это изменение и перерисовывает DOM, применяя или убирая CSS-классы. Это приводит к плавной анимации расширения/сжатия слайдов без необходимости писать какой-либо дополнительный код для манипуляций со стилями.

Этот пример наглядно демонстрирует мощь Vue для создания слайдеров и других интерактивных элементов при разработке сайтов: вы управляете данными, а фреймворк заботится об обновлении интерфейса.

Данный слайдер — лишь один из примеров того, как современные технологии могут оживить ваш сайт. Хотите реализовать на своем проекте нестандартные галереи, интерактивные элементы или сложные анимации? Наша команда разработчиков с глубоким знанием Vue готова создать для вас уникальное и эффективное решение. Закажите разработку компонентов под ключ — и ваш сайт заиграет по-новому!