- Главная
- Проекты на Vue
- Кнопка с эффектом пульсации на Vue
Кнопка с эффектом пульсации на Vue
Создание интерактивных анимаций прямо на сайте — одна из тех задач, которые кажутся сложными, пока не попробуешь Vue.js. Этот современный фреймворк позволяет быстро и элегантно «оживлять» интерфейсы, управляя состоянием и поведением компонентов без лишнего кода. Например, анимация пульсации при клике по кнопке — типичный случай, где Vue значительно упрощает разработку, позволяя сосредоточиться на визуальной части, а не на сложной логике.
Ниже вы можете увидеть рабочий пример такого компонента — кликайте на кнопке, чтобы запустить эффект расходящихся волн.
Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.
Объяснение логики работы компонента
Этот компонент создаёт визуальную анимацию «пульсации» в точке клика на кнопке. Вот как это работает:
Структура (HTML)
- Основа — контейнер
#appи кнопка с классом.app__btn - На кнопку установлен обработчик события
@click="createCircle", который запускает анимацию
Стили (CSS)
- Элемент
.circle— абсолютно позиционированный круг с белым фоном - Изначально скрыт трансформацией
scale(0) - Анимация
@keyframes circleплавно увеличивает круг и уменьшает его прозрачность - Кнопка имеет
position: relativeиoverflow: hidden, что ограничивает распространение анимации
Логика (Vue.js)
- Функция
createCircleполучает объект событияe, содержащий информацию о клике - С помощью
getBoundingClientRect()получаются точные координаты и размеры кнопки относительно окна браузера
Вычисляются координаты клика относительно левого верхнего угла кнопки:
e.clientX - rect.left— горизонтальное смещение от левого края кнопкиe.clientY - rect.top— вертикальное смещение от верхнего края кнопки
Далее:
- Создаётся новый элемент
div, которому присваивается классcircleдля применения анимации - Вычисленные координаты устанавливаются как
topиleftдля позиционирования круга - Круг добавляется внутрь кнопки методом
appendChild - Через 500 мс (длительность анимации в CSS) круг автоматически удаляется
Ключевые преимущества реализации
- Использование
getBoundingClientRect()— более современный и точный способ получения координат элементов - Анимация всегда возникает точно в месте клика, создавая прямой визуальный отклик на действие пользователя
- Vue обеспечивает удобное связывание события с методом, а остальная логика работает на чистом JavaScript
- Автоматическое удаление элементов предотвращает накопление ненужных DOM-элементов
Почему это эффективно:
Компонент демонстрирует идеальное сочетание простоты и интерактивности — минимальным кодом достигается запоминающийся визуальный эффект, который улучшает пользовательский опыт.
Нравится эффект?
Представленный выше компонент — наглядный пример того, как Vue.js упрощает создание интерактивных анимаций. Мы разобрали код по косточкам, чтобы вы могли понять механику и использовать её в своих проектах. Если вам нужны нестандартные UI-решения, обращайтесь — мы с удовольствием воплотим ваши идеи в современных и отзывчивых компонентах.