← Назад к вопросам

Что такое событие?

1.0 Junior🔥 202 комментариев
#JavaScript Core

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое событие в контексте Frontend-разработки?

Событие (Event) — это сигнал, генерируемый браузером или самой веб-страницей, который оповещает систему о том, что произошло определённое взаимодействие или изменение. Это фундаментальная концепция асинхронного программирования в JavaScript, лежащая в основе отзывчивых и интерактивных веб-интерфейсов. По сути, событие — это объект, содержащий информацию о произошедшем действии (например, клик мышью, нажатие клавиши, загрузка ресурса), который может быть "перехвачен" и обработан специальной функцией — обработчиком событий (event handler).

Механизм работы событий и Event Loop

События обрабатываются в рамках событийно-ориентированной архитектуры JavaScript. Ядром этого механизма является Event Loop (цикл событий), который непрерывно проверяет очередь сообщений (очередь задач) и выполняет соответствующие обработчики. Когда событие происходит, оно попадает в эту очередь, и когда стек вызовов (call stack) освобождается, Event Loop извлекает событие и запускает его обработчик.

// Пример: обработчик для события 'click'
const button = document.getElementById('myButton');
button.addEventListener('click', function(event) {
    // event — это объект события, содержащий детали (например, координаты клика)
    console.log('Кнопка нажата!', event.clientX, event.clientY);
});

Классификация событий

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

  • События мыши:
    *   `click` — клик левой кнопкой мыши.
    *   `dblclick` — двойной клик.
    *   `mousedown` / `mouseup` — нажатие и отпускание кнопки мыши.
    *   `mousemove` — движение курсора.
    *   `mouseenter` / `mouseleave` — курсор входит в элемент или покидает его.
  • События клавиатуры:
    *   `keydown` / `keyup` — нажатие и отпускание клавиши.
    *   `keypress` — (устаревшее) нажатие клавиши, которая генерирует символ.
  • События DOM:
    *   `DOMContentLoaded` — DOM дерево полностью построено (без ожидания стилей и изображений).
    *   `load` — вся страница (включая ресурсы) загружена.
  • События форм:
    *   `submit` — отправка формы.
    *   `change` — изменение значения элемента (например, в `<input>` или `<select>`).
    *   `focus` / `blur` — получение и потеря фокуса элементом.
  • События касания (Touch Events): Для мобильных устройств — touchstart, touchmove, touchend.
  • Пользовательские события (Custom Events): События, созданные разработчиком для внутренней коммуникации компонентов.

Объект события и его свойства

Каждое событие представлено объектом (наследником Event), который содержит полезные свойства и методы:

  • type — тип события (например, "click").
  • target / currentTarget — элемент, на котором произошло событие (target), и элемент, на котором сработал обработчик (currentTarget).
  • preventDefault() — отменяет действие по умолчанию (например, переход по ссылке).
  • stopPropagation() — останавливает всплытие события.

Всплытие и перехват (Event Bubbling and Capturing)

Это ключевые фазы распространения события в DOM:

  1. Фаза перехвата (Capturing Phase) — событие движется от window вниз к целевому элементу.
  2. Фаза цели (Target Phase) — событие достигло целевого элемента.
  3. Фаза всплытия (Bubbling Phase) — событие поднимается от целевого элемента вверх к window.
// Третий параметр addEventListener определяет фазу (по умолчанию false — всплытие)
element.addEventListener('click', handler, true); // Перехват
element.addEventListener('click', handler, false); // Всплытие (или просто без третьего аргумента)

Современные практики работы с событиями

  • Делегирование событий (Event Delegation) — техника, при которой один обработчик вешается на общего родителя, а не на множество дочерних элементов. Это эффективно для динамически добавляемых элементов и улучшает производительность.
    document.getElementById('list').addEventListener('click', function(event) {
        if (event.target.tagName === 'LI') {
            console.log('Клик по элементу списка:', event.target.textContent);
        }
    });
    
  • Пассивные обработчики (Passive Listeners) — помечая обработчик как { passive: true }, мы указываем браузеру, что preventDefault() не будет вызван, что позволяет немедленно обрабатывать скролл и касания без блокировки.
    element.addEventListener('touchmove', handler, { passive: true });
    

Понимание событий — это основа создания сложных SPA-приложений (React, Vue, Angular), где компоненты взаимодействуют через события. Например, в React используется синтетическая система событий (SyntheticEvent), которая является кросс-браузерной обёрткой над нативными событиями для обеспечения согласованности и производительности.

Что такое событие? | PrepBro