Sobes.tech
Junior

Модели ҳодиса дар браузер чист?

sobes.tech AI

Ҷавоб аз AI

Насловний спосіб обробки взаємодій користувача (кліки, введення, наведення) та системних подій (завантаження сторінки, помилки) у веб-браузері.

Основні концепції:

  • Подія: дія, яка сталася.
  • Обробник події: функція, яка виконується при настанні події.
  • Об'єкт події (Event object): передається обробнику і містить інформацію про подію (тип, елемент, координати тощо).

Стандартний потік подій:

  1. Захоплення (Capturing phase): подія спускається від найвищого елемента DOM (Window, Document) до цільового елемента. Обробники на цьому етапі спрацьовують першими.
  2. Фаза цілі (Target phase): подія досягає цільового елемента - елемента, де вона сталася.
  3. Вспливання (Bubbling phase): подія піднімається від цільового елемента назад по DOM-дереву до Window. Обробники на цьому етапі спрацьовують після фази захоплення і цілі.

Додавання обробників:

  • Атрибути HTML (onclick, onload): застарілий спосіб, не рекомендується для складних додатків.
  • Властивості елементів DOM (element.onclick): можна призначити лише одного обробника на кожен тип події для елемента.
    // Приклад
    const button = document.querySelector('button');
    button.onclick = function() {
        alert('Натиснута кнопка!');
    };
    
  • Метод addEventListener: переважний спосіб. дозволяє додавати кілька обробників для однієї події та контролювати фазу обробки (захоплення або вспливання).
    // Приклад
    const button = document.querySelector('button');
    button.addEventListener('click', function(event) {
        console.log('Клік по кнопці!', event);
    }, false); // false - вспливання, true - захоплення
    

Метод removeEventListener використовується для видалення обробників.

Делегування подій (Event delegation): приєднання одного обробника до батьківського елемента для обробки подій від дочірніх елементів. Економить ресурси і спрощує роботу з динамічним вмістом.

// Приклад делегування
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('Клік по елементу списку:', event.target.textContent);
    }
});