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

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

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

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

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

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

JS властивість Event.relatedTarget (Focus)

Загальний опис

relatedTarget — це властивість об'єкта FocusEvent, яка містить посилання на елемент, з якого або на який переміщений фокус під час подій, пов'язаних із фокусуванням, таких як focusin, focusout, blur або focus. Для подій focusin і focus ця властивість вказує на елемент, з якого фокус перемістився, а для focusout і blur — на елемент, на який фокус перейшов.

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

Варто зазначити, що relatedTarget може бути null у випадках, коли фокус переміщений на інший елемент або за межі документа, наприклад, коли користувач натискає іншу вкладку браузера. Це важливо враховувати, щоб уникнути помилок при обробці фокусу.

Приклад використання:

inputElement.addEventListener('focusout', function(event) {
  if (event.relatedTarget) {
    console.log("Фокус перемістився на елемент: ", event.relatedTarget);
  } else {
    console.log("Фокус втрачений.");
  }
});

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

Порада:

Зручно використовувати relatedTarget для створення більш динамічних інтерфейсів, наприклад, при зміні стану елемента або відображенні контекстних повідомлень, коли фокус переміщується між різними елементами інтерфейсу. Це дозволяє створювати більш чуйні інтерфейси.

Порада:

Щоб уникнути повторної обробки подій, можна порівняти попередній елемент фокусування з поточним за допомогою relatedTarget. Це може бути корисно, наприклад, у випадках, коли потрібно уникнути зайвих перезавантажень компонентів або повторного запуску анімацій.

Порада:

Для випадаючих меню або діалогових вікон можна використовувати relatedTarget, щоб перевірити, чи фокус перемістився на елемент всередині контейнера або зовні його. Це дозволяє точніше контролювати закриття меню або діалогів.

Синтаксис

event.relatedTarget

Значення

Return

Переглядачі

Переглядач

26

24

7

15

12

Переглядач

4.4

26

24

7

Переглядач

-

-

Приклади


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

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

const input1 = document.getElementById('input1');
const input2 = document.getElementById('input2');

input1.addEventListener('focusout', function(event) {
  if (event.relatedTarget === input2) {
    console.log("Фокус перемістився з першого поля на друге.");
  } else {
    console.log("Фокус залишив перше поле.");
  }
});

Цей приклад показує, як закрити діалогове вікно, якщо фокус перемістився за межі його вмісту. Використання relatedTarget дозволяє точно визначити, чи фокус вийшов за межі діалогового елемента, що допомагає контролювати його видимість.

const dialog = document.getElementById('dialog');
const closeButton = document.getElementById('closeButton');

dialog.addEventListener('focusout', function(event) {
  if (!dialog.contains(event.relatedTarget)) {
    dialog.style.display = 'none';
    console.log("Діалогове вікно закрите через втрату фокусу.");
  }
});