Генератор случайных цитат

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

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

Особенностью данного компонента является работа с внешними данными через API. В нашем случае это загрузка цитат из локального JSON-файла, но этот же принцип легко масштабируется до работы с любым внешним API. Такой подход открывает огромные возможности: вы можете подключить компонент к базе данных, сервису цитат в реальном времени или любому другому источнику данных, при этом сама логика компонента останется неизменной.

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

|

Read and think about it! Прочитай и задумайся!

{{obj.quote}}

{{obj.author}}

Author unknown Автор не известен

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

Как работает этот генератор цитат на Vue?

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

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

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

  1. <button @click="handleRu" :class="{active: !lang}"> – Обрабатывает клик по кнопке русского языка и динамически добавляет CSS-класс active, когда русский язык выбран.
  2. <span v-if="!lang">Read and think about it!</span> – Условно отображает текст на английском или русском языке в зависимости от значения реактивной переменной lang.
  3. {{obj.quote}} – Реактивно отображает текст цитаты, который автоматически обновляется при изменении данных.
  4. <button class="app__btn" @click="getQuote"> – При клике на эту кнопку вызывается метод для получения новой случайной цитаты.

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

Стили создают современный адаптивный интерфейс:

  1. Контейнер #app использует display: grid с gap: 30px 0 для идеального выравнивания всех элементов по вертикали.
  2. width: min(768px, 100%) – обеспечивает адаптивность, ограничивая максимальную ширину 768px, но на маленьких экранах занимая 100% ширины.
  3. .app__lang button.active – делает активную кнопку языка полностью непрозрачной и жирной, в то время как неактивные кнопки полупрозрачны.

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

Логика компонента интуитивно понятна и эффективна:

  1. Состояние: Мы используем реактивные ссылки let obj = ref({quote: '', author: ''}) для хранения текущей цитаты и let lang = ref(true) для отслеживания выбранного языка (true — русский, false — английский).
  2. Метод getQuote: Асинхронно загружает массив цитат из JSON-файла, выбирает случайный элемент и обновляет obj.value в зависимости от выбранного языка.
  3. Методы handleRu и handleEn: Переключают язык и автоматически загружают новую цитату на выбранном языке, предотвращая лишние запросы если язык уже активен.
  4. Хук onMounted: Гарантирует, что первая цитата загружается сразу после инициализации компонента.
  5. Реактивность Vue: При изменении obj.value или lang.value Vue автоматически обновляет соответствующие элементы в DOM — текст цитат, автора и интерфейсные надписи, создавая бесшовный пользовательский опыт.

Понравился компонент?

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

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

Свяжитесь с нами, и мы обсудим вашу идею!