Вебсправочник
Основы веб-разработки

Passive-обработчики: наблюдение за событием без отмены действия

Параметр passive сообщает браузеру, что обработчик не будет отменять действие события через preventDefault. Это особенно важно для некоторых событий ввода, связанных с прокруткой.

Назначение

Параметр passive сообщает браузеру, что обработчик не будет отменять действие события через preventDefault. Это особенно важно для некоторых событий ввода, связанных с прокруткой.

Как это работает

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

Пример

const area = document.querySelector("#scroll-demo");
function observeWheel(event) {
  console.log("Учебное направление:", Math.sign(event.deltaY));
}
if (area) {
  area.addEventListener("wheel", observeWheel, {passive: true});
  // После упражнения:
  // area.removeEventListener("wheel", observeWheel);
}

Что должно получиться

На своей странице с областью scroll-demo обработчик наблюдает за wheel и не блокирует действие браузера. Пример не создаёт собственный механизм прокрутки.

Граница применения и частая ошибка

Passive не делает тяжёлый код быстрым. Частые записи в консоль сами могут мешать измерению. Не назначайте passive:true обработчику, которому действительно требуется отменить действие; сначала пересмотрите необходимость перехвата.

Самостоятельная проверка

Проверьте обычную прокрутку своей тестовой области с наблюдателем и без него. Уберите журналирование перед измерением производительности. Затем объясните, почему неотменяемое событие scroll и входное событие wheel решают разные задачи.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.