Пользовательские события

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

Обработчики событий

Для того чтобы связать действия пользователя с изменениями в интерфейсе, необходимо использовать обработчики событий. В Petite-Vue обработка событий происходит с использованием директивы @, которая является коротким вариантом для привязки событий. Эта директива позволяет назначать обработчики событий напрямую в шаблонах HTML, без необходимости писать дополнительный JavaScript код.

Пример использования обработчика для клика:

<div x-data="{ count: 0 }">
  <button @click="count++">Увеличить</button>
  <p>Счётчик: <span x-text="count"></span></p>
</div>

В этом примере директива @click назначает обработчик события клика на кнопку. Каждый клик увеличивает значение переменной count, и обновляется текст в элементе span.

Модификаторы событий

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

Некоторые из часто используемых модификаторов:

  • @click.prevent — предотвращает стандартное поведение события.
  • @click.stop — предотвращает распространение события в DOM.
  • @keydown.enter — срабатывает только при нажатии клавиши Enter.
  • @submit.prevent — предотвращает отправку формы.

Пример с использованием модификатора:

<form @submit.prevent="submitForm">
  <button type="submit">Отправить</button>
</form>

В данном примере событие отправки формы будет предотвращено с помощью модификатора .prevent, и вместо этого будет вызвана функция submitForm.

События с аргументами

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

Пример с передачей параметра:

<div x-data="{ message: '' }">
  <input @input="message = $event.target.value" />
  <p>Вы ввели: <span x-text="message"></span></p>
</div>

В этом примере объект события $event используется для получения значения, введённого в поле ввода. В обработчике события доступ к значению поля происходит через свойство target.value.

Работа с несколькими событиями

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

Пример нескольких обработчиков:

<div x-data="{ count: 0 }">
  <button @click="count++" @click="console.log('Клик!')">Увеличить</button>
  <p>Счётчик: <span x-text="count"></span></p>
</div>

В этом примере два обработчика события click выполняются поочередно. Сначала увеличивается счётчик, а затем в консоль выводится сообщение.

Также можно использовать различные логические выражения и методы для обработки нескольких событий:

<div x-data="{ count: 0 }">
  <button @click="count++" :class="{ 'active': count > 0 }">Увеличить</button>
  <p x-text="count"></p>
</div>

Здесь, помимо увеличения счётчика, условие для класса применяется в зависимости от значения count.

Делегирование событий

Для оптимизации работы с множеством элементов, которые могут генерировать одно и то же событие, можно использовать делегирование событий. В Petite-Vue это можно реализовать с помощью директивы @, комбинированной с делегированием событий в родительском элементе.

Пример делегирования событий:

<div x-data>
  <ul @click="alert('Клик по элементу!')">
    <li>Элемент 1</li>
    <li>Элемент 2</li>
    <li>Элемент 3</li>
  </ul>
</div>

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

События мыши и клавиатуры

Petite-Vue предоставляет поддержку множества событий, включая события мыши (например, click, mouseenter, mouseleave, mousemove) и события клавиатуры (keydown, keyup, keypress).

Пример с использованием события mouseenter:

<div x-data="{ isHovered: false }">
  <button @mouseenter="isHovered = true" @mouseleave="isHovered = false">
    Наведи курсор
  </button>
  <p x-text="isHovered ? 'Курсор внутри' : 'Курсор вне'"></p>
</div>

В этом примере с помощью событий mouseenter и mouseleave можно отслеживать, находится ли курсор внутри кнопки.

Управление всплытием и захватом событий

Petite-Vue позволяет управлять всплытием и захватом событий с помощью модификаторов @click.stop и @click.capture. Первый модификатор останавливает всплытие события, предотвращая его распространение на другие элементы, а второй — указывает, что событие должно быть перехвачено на этапе захвата.

Пример использования @click.stop:

<div @click="console.log('Внешний элемент')">
  <button @click.stop="console.log('Клик по кнопке')">Кнопка</button>
</div>

Здесь событие клика на кнопке будет остановлено, и оно не будет всплывать к родительскому элементу.

Пример использования @click.capture:

<div @click.capture="console.log('Захват события на родителе')">
  <button @click="console.log('Клик по кнопке')">Кнопка</button>
</div>

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

Резюме

Petite-Vue предоставляет мощные инструменты для работы с пользовательскими событиями, делая их обработку интегрированной и реактивной. Использование директив, модификаторов, делегирования событий и управления всплытием помогает создавать эффективные и гибкие пользовательские интерфейсы.