- Главная
- Проекты на Vue
- Выпей воды
Выпей воды
Создание динамичных и отзывчивых веб-интерфейсов может быть сложной задачей, но современные фреймворки, такие как Vue.js, значительно упрощают этот процесс. Vue предлагает реактивность, декларативную разработку и компонентный подход, что позволяет превращать статичные макеты в живые, интерактивные приложения с минимальными усилиями.
Перед вами — наглядный пример того, как просто и элегантно можно создать полезный UI-компонент. Это трекер употребления воды, который визуализирует ваш прогресс. Интерактивность, вычисляемые значения и плавные анимации реализованы с помощью Vue буквально в несколько десятков строк кода.
Ниже вы можете не только протестировать готовый компонент, но и изучить его полный исходный код с подробными пояснениями.
Выпей воды
Цель: {{ total }} литра
Внимание! Представленный код — это готовый компонент, но для его работы на странице должен быть установлен и подключен фреймворк Vue. Если вы начинающий разработчик, просто добавьте строку <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
в раздел <head> вашего HTML, и всё заработает.
Разбор кода: как работает этот компонент на Vue.js
Давайте подробно разберем, как устроен этот интерактивный трекер.
Структура и данные (Composition API)
В разделе script мы используем Composition API Vue 3. Функция ref создает реактивные переменные:
total— общая цель в литрах (2л).glasses— общее количество стаканов для визуализации (8).drinked— процент выпитой воды (от 0 до 100).remained— оставшийся объем в литрах.ind— индекс последнего выбранного стакана.
Логика интерактивности
Ключевая функция handleClick(i) вызывается при клике на стакан:
- Она определяет, был ли стакан уже активен, позволяя «отменять» выбор.
- Вычисляет новый остаток:
remained.value = total.value - ((i + 1) * (total.value / glasses.value)). - На основе остатка вычисляет процент заполнения:
drinked.value = 100 - (remained.value / total.value) * 100.
Реактивная связь с шаблоном (HTML)
В шаблоне используется директивы Vue:
{{ total }},{{ drinked }}%— вывод реактивных данных.:style="{height: drinked + '%'}"— динамическое изменение высоты столба воды через inline-стили. Vue автоматически обновляет DOM при измененииdrinked.v-for="glass,i in glasses"— рендерим 8 стаканов на основе реактивного массива.:class="{active: i <= ind}"— условное применение классаactiveк стаканам, которые должны быть «заполнены».@click="handleClick(i)"— привязка функции-обработчика к клику.
Стилизация и анимация
В CSS заданы переменные --tr для времени анимации. Плавные переходы (transition) для высоты .app__vessel-top и .app__vessel-bottom создают эффект «переливания» воды при изменении реактивных переменных drinked и remained.
Итог: Этот компонент — отличная иллюстрация мощи Vue.js. Реактивность связывает данные и представление, а логика инкапсулирована в одном компоненте, что делает код чистым, понятным и легко поддерживаемым.
Вдохновились примером?
Мы готовы разработать креативный и функциональный интерфейс для вашего сайта.
Наша веб-студия специализируется на создании современных веб-приложений с использованием Vue.js и других передовых технологий. От сложных интерактивных виджетов и анимированных интерфейсов до полноценных бизнес-приложений — мы воплотим ваши идеи в цифровой реальности.
Напишите нам – и мы разработаем решение, которое будет не только работать безупречно, но и восхищать ваших пользователей.