Кнопка с эффектом пульсации на Vue

Создание интерактивных анимаций прямо на сайте — одна из тех задач, которые кажутся сложными, пока не попробуешь Vue.js. Этот современный фреймворк позволяет быстро и элегантно «оживлять» интерфейсы, управляя состоянием и поведением компонентов без лишнего кода. Например, анимация пульсации при клике по кнопке — типичный случай, где Vue значительно упрощает разработку, позволяя сосредоточиться на визуальной части, а не на сложной логике.

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

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

Объяснение логики работы компонента

Этот компонент создаёт визуальную анимацию «пульсации» в точке клика на кнопке. Вот как это работает:

Структура (HTML)

  1. Основа — контейнер #app и кнопка с классом .app__btn
  2. На кнопку установлен обработчик события @click="createCircle", который запускает анимацию

Стили (CSS)

  1. Элемент .circle — абсолютно позиционированный круг с белым фоном
  2. Изначально скрыт трансформацией scale(0)
  3. Анимация @keyframes circle плавно увеличивает круг и уменьшает его прозрачность
  4. Кнопка имеет position: relative и overflow: hidden, что ограничивает распространение анимации

Логика (Vue.js)

  1. Функция createCircle получает объект события e, содержащий информацию о клике
  2. С помощью getBoundingClientRect() получаются точные координаты и размеры кнопки относительно окна браузера

Вычисляются координаты клика относительно левого верхнего угла кнопки:

  • e.clientX - rect.left — горизонтальное смещение от левого края кнопки
  • e.clientY - rect.top — вертикальное смещение от верхнего края кнопки

Далее:

  1. Создаётся новый элемент div, которому присваивается класс circle для применения анимации
  2. Вычисленные координаты устанавливаются как top и left для позиционирования круга
  3. Круг добавляется внутрь кнопки методом appendChild
  4. Через 500 мс (длительность анимации в CSS) круг автоматически удаляется

Ключевые преимущества реализации

  1. Использование getBoundingClientRect() — более современный и точный способ получения координат элементов
  2. Анимация всегда возникает точно в месте клика, создавая прямой визуальный отклик на действие пользователя
  3. Vue обеспечивает удобное связывание события с методом, а остальная логика работает на чистом JavaScript
  4. Автоматическое удаление элементов предотвращает накопление ненужных DOM-элементов

Почему это эффективно:

Компонент демонстрирует идеальное сочетание простоты и интерактивности — минимальным кодом достигается запоминающийся визуальный эффект, который улучшает пользовательский опыт.

Нравится эффект?

Представленный выше компонент — наглядный пример того, как Vue.js упрощает создание интерактивных анимаций. Мы разобрали код по косточкам, чтобы вы могли понять механику и использовать её в своих проектах. Если вам нужны нестандартные UI-решения, обращайтесь — мы с удовольствием воплотим ваши идеи в современных и отзывчивых компонентах.