Разделенный экран (split screen)

Разделенные экраны (Split Screen) — трендовый элемент в современном веб-дизайне. Они позволяют эффектно представить два продукта, услуги или варианта выбора, вовлекая пользователя в интерактивное взаимодействие. Раньше создание такого динамичного компонента требовало немало кода, но с фреймворком Vue.js это становится невероятно простой задачей. Реактивность и декларативный подход Vue позволяют в несколько строк кода реализовать плавную анимацию и отклик на действия пользователя.

Ниже вы можете увидеть готовый компонент в работе. Наведите курсор на каждую из половин, чтобы увидеть анимацию.

{{ item.title }}

Купить

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

Как это работает? Подробный разбор кода

Давайте разберем по частям, как создается эта магия.

Верстка и директивы Vue

  1. v-for="item in items" — директива, которая автоматически рендерит необходимое количество блоков на основе массива данных. Это делает код масштабируемым: чтобы добавить третью секцию, достаточно просто добавить новый объект в массив items.
  2. :class="{expand: item.expand}" — динамически добавляет или убирает CSS-класс expand в зависимости от состояния item.expand. Это и есть сердцевина анимации.

Стилизация на CSS

  1. Контейнер .app-container — это flex-контейнер, где дочерние элементы по умолчанию имеют равную ширину flex: 1 1 0.
  2. Анимация — плавное изменение свойства flex-grow в классе .expand заставляет активную секцию растягиваться. Скорость и характер анимации задаются CSS-переменной --tr.
  3. Адаптивность — для заголовка используется современная функция clamp(), которая обеспечивает отзывчивый шрифт, плавно изменяющийся между минимальным и максимальным значениями.
  4. Наложения — псевдоэлементы ::after на изображениях создают полупрозраные цветные фильтры для улучшения читаемости текста.

Логика на Vue.js (Composition API)

  1. Реактивные данные: В items.ref хранится массив объектов с данными для каждой секции. Ключевое поле expand отвечает за то, активна ли в данный момент секция.
  2. Обработчик события: Функция handleMouseEnter срабатывает при наведении курсора на блок .app-item. Она находит заголовок внутри этого блока и сравнивает его текст с данными в массиве items. Той секции, заголовок которой совпал, устанавливается expand: true, а всем остальным — false.

Готовы реализовать подобное на вашем сайте?

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

Наша веб-студия готова разработать для вас:

  • Уникальные интерактивные интерфейсы на Javascript и Vue.js.
  • Адаптивные и быстрые сайты, которые понравятся и вашим клиентам, и поисковым системам.
  • Любые аналогичные компоненты, идеально встроенные в дизайн и логику вашего проекта.

Свяжитесь с нами сегодня, и мы превратим ваши идеи в чистый и эффективный код!