Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS об'єкт Event

Введення в об'єкт Event

Об'єкт Event у JavaScript представляє подію, яка відбулась у вашому браузері на веб-сторінці. Це може бути що-небудь: від кліка мишею чи натискання клавіши на клавіатурі до завантаження сторінки або зміни розміру вікна браузера. Кожна подія має свій об'єкт Event, який містить інформацію про неї.

document.addEventListener('click', function(event) {
    console.log(event);
});

У цьому прикладі ми додаємо обробник подій до документа, який буде "слухати" подію "click". Якщо десь на сторінці відбудеться клік, функція з внутрішнім кодом активується. Всередині функції ми можемо вивести об'єкт події, що створився, у консоль.

Важливо зрозуміти, що об'єкт Event — це тимчасовий об'єкт, який створюється лише на час обробки події. Він містить інформацію про поточний стан події, наприклад, про те, яка клавіша була натиснута або де відбувся клік мишею на сторінці.

Окрім цього, об'єкт Event містить методи, що дозволяють контролювати подію: переривати її поширення, запобігати діям за замовчуванням та інше. Завдяки цьому можна створювати більш розширені та налаштовані реакції на події користувача.

Властивості об'єкта Event

Об'єкт Event в JavaScript включає в себе численні властивості, що дозволяють зрозуміти контекст, у якому відбулась подія. Властивості допомагають отримувати конкретну інформацію про подію та реагувати на неї відповідним чином.

event.target: Ця властивість вказує на об'єкт, де відбулась подія. Наприклад, якщо користувач клікнув на кнопку, event.target буде цією кнопкою.

document.addEventListener('click', function(event) {
    console.log(event.target);
});

У цьому прикладі, при кліку будь-де на сторінці, в консоль буде виведено елемент, на який було здійснено клік. Це може бути, наприклад, параграф тексту, зображення чи інший елемент сторінки.

event.type: Показує тип події (наприклад, "click", "keydown").

document.addEventListener('click', function(event) {
    console.log(event.type);  // виведе "click"
});

Тут ми слухаємо клік по документу. Коли користувач клікає, у консоль виводиться тип події, у даному випадку — "click".

event.currentTarget: Ця властивість вказує на елемент, до якого було призначено обробник події, в той час як event.target може вказувати на дочірній елемент.

button.addEventListener('click', function(event) {
    console.log(event.currentTarget);  // буде кнопка, незалежно від місця кліку
});

У вищезазначеному прикладі, навіть якщо всередині кнопки є інші елементи (наприклад, текст чи іконка) і клік відбувається по них, event.currentTarget завжди буде вказувати на кнопку.

event.timestamp: Час відбування події у мілісекундах від моменту завантаження сторінки.

document.addEventListener('click', function(event) {
    console.log(event.timestamp);
});

Коли користувач клікає на сторінку, у консоль виводиться час від початку завантаження сторінки до моменту кліку в мілісекундах.

Розуміння та використання властивостей об'єкта Event дозволяє глибше взаємодіяти з користувачем і точніше реагувати на його дії на веб-сторінці. Кожна властивість дає вам додаткову інформацію, яка може бути використана для реалізації різних сценаріїв взаємодії з користувачем.

Делегування подій

Однією з ключових особливостей роботи з об'єктом Event є можливість делегування подій. Ідея полягає в тому, щоб додати один обробник подій до батьківського елемента замість додавання окремих обробників до кожного дитячого елемента. Коли подія відбувається на дитячому елементі, вона "поширюється" вверх до батьківського елемента, де її можна обробити.

Приклад:

let ul = document.querySelector('ul');
ul.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log(event.target.textContent);
    }
});

У цьому прикладі ми додаємо обробник подій до елемента <ul>. Коли користувач клікає на будь-який елемент <li> всередині <ul>, обробник виводить текст цього елемента. Таким чином, нам не потрібно додавати окремі обробники до кожного <li>, що є дуже ефективним для великих списків або коли елементи динамічно додаються на сторінку.

Нотатка:

Робота з об'єктом Event дає можливість глибше взаємодіяти з користувачем, зрозуміти його дії та зробити його досвід взаємодії з веб-сторінкою максимально комфортним та ефективним.

Порада:

Не блокуйте дії за замовчуванням без потреби. Коли ви використовуєте метод event.preventDefault(), це зупиняє стандартну дію браузера на певну подію (наприклад, перехід по посиланню). Хоча це корисно в певних ситуаціях, надмірне використання може спричинити проблеми зі стандартною поведінкою сторінки.

Порада:

Використовуйте делегування подій. Замість того, щоб додавати обробник подій до кожного елемента окремо, додайте один обробник до їх спільного предка. Це не тільки поліпшить продуктивність, але і спростить управління динамічно доданими елементами.

Порада:

Будьте обережні із порядком подій. Різні браузери можуть виводити події в різному порядку. Наприклад, подія "focus" може виконуватися перед чи після події "click" в залежності від браузера. Тому завжди тестуйте свій код в різних браузерах.

Порада:

Пам'ятайте різницю між event.target та event.currentTarget. Ці дві властивості часто використовуються, але вони розрізняються. event.target це елемент, на якому відбулась подія, тоді як event.currentTarget - елемент, до якого було призначено обробник події. Розуміння цієї різниці може допомогти уникнути багатьох помилок.

Синтаксис

let obj = new Event();

Переглядачі

Переглядач

1

4

1

4

12

Переглядач

37

18

4

1

Переглядач

14.5.0

1.0

Приклади


Ви можете використовувати об'єкт Event для перевірки даних у полях форми перед її відправленням. Якщо дані некоректні, ви можете використовувати event.preventDefault(), щоб запобігти відправці форми.

У прикладі ми додаємо обробник подій для події "submit" форми. Якщо поле з ідентифікатором "name" порожнє, ми виводимо повідомлення та зупиняємо відправлення форми.

document.querySelector('form').addEventListener('submit', function(event) {
    var name = document.querySelector('#name').value;
    if(name === "") {
        alert('Будь ласка, введіть ваше ім'я!');
        event.preventDefault();
    }
});

Додавання обробників подій до кожного елемента може бути неефективним. Замість цього можна використовувати делегування подій, додавши один обробник до їх спільного предка.

У прикладі ми додаємо обробник подій для кліків усередині списку. Якщо клік відбувся на елементі li, ми виводимо його вміст.

document.querySelector('ul').addEventListener('click', function(event) {
    if(event.target.tagName === 'LI') {
        alert(event.target.textContent);
    }
});

Об'єкт Event може бути використаний для створення системи вкладок на веб-сторінці, де клік по одній вкладці показує відповідний контент, а інші вкладки стають прихованими.

У цьому прикладі, коли користувач клікає по вкладці (елемент з класом 'tab'), всі блоки контенту спочатку стають прихованими. Потім відображається блок контенту, що відповідає вибраній вкладці.

document.querySelector('.tabs').addEventListener('click', function(event) {
    if(event.target.classList.contains('tab')) {
        document.querySelectorAll('.content').forEach(function(content) {
            content.classList.add('hidden');
        });
        var tabContent = document.querySelector(event.target.dataset.tabTarget);
        tabContent.classList.remove('hidden');
    }
});

Методи

Властивості