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

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

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

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

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

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

JS метод Object.matchMedia()

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

Метод matchMedia() є важливою складовою об'єкта Window у мові програмування JavaScript. Цей метод дає можливість виконувати медіазапити (media queries) у JavaScript, схоже до тих, що використовуються в CSS для адаптивного дизайну. Основна суть методу полягає у визначенні, чи відповідає поточне середовище певним медіа-умовам. Це корисно для адаптації макету веб-сторінки чи функціональності за різних розмірів вікна браузера або різних типів пристроїв.

Метод matchMedia() приймає один аргумент - рядок, що представляє медіа-запит, і повертає об'єкт MediaQueryList. Цей об'єкт містить інформацію про те, чи задовольняє середовище умовам медіа-запиту (matches), а також дозволяє реєструвати слухачів для відстеження змін.

const mediaQueryList = window.matchMedia("(min-width: 600px)");

У цьому прикладі matchMedia() перевіряє, чи ширина вікна браузера більша або дорівнює 600 пікселям.

Реагування на зміни

Для відстеження змін у відповідності медіа-запиту, можна використати метод addEventListener на об'єкті MediaQueryList.

function handleMediaChange(e) {
    if (e.matches) {
        console.log("Екран більше 600 пікселів у ширину");
    } else {
        console.log("Екран менше 600 пікселів у ширину");
    }
}

const mediaQueryList = window.matchMedia("(min-width: 600px)");
mediaQueryList.addEventListener("change", handleMediaChange);

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

Використання у комплексних сценаріях

Метод matchMedia() може бути використаний для реалізації складніших сценаріїв адаптивного дизайну. Наприклад, можна використати кілька медіа-запитів для застосування різного стилю або поведінки в залежності від розміру вікна чи орієнтації пристрою.

const mediaQueryDesktop = window.matchMedia("(min-width: 1024px)");
const mediaQueryTablet = window.matchMedia("(min-width: 600px) and (max-width: 1023px)");
const mediaQueryMobile = window.matchMedia("(max-width: 599px)");

function updateLayout() {
    if (mediaQueryDesktop.matches) {
        // Код для десктопного вигляду
    } else if (mediaQueryTablet.matches) {
        // Код для планшету
    } else if (mediaQueryMobile.matches) {
        // Код для мобільного
    }
}

// Виклик функції при завантаженні сторінки
updateLayout();

// Виклик функції при зміні розміру вікна
window.addEventListener("resize", updateLayout);

У цьому прикладі створюються три медіа-запити для різних типів пристроїв. Функція updateLayout перевіряє, який запит відповідає поточному стану вікна, і виконує відповідний код.

Використання методу matchMedia() є критично важливим для створення адаптивних веб-додатків. Цей метод дозволяє JavaScript взаємодіяти з CSS медіа-запитами, надаючи програмістам більшу гнучкість у реалізації адаптивного дизайну. Однак, слід звернути увагу на продуктивність, оскільки надмірне використання addEventListener може призвести до зниження продуктивності веб-сторінки.

Порада:

При розробці адаптивного дизайну необхідно враховувати, що matchMedia() повертає об'єкт MediaQueryList, який містить властивість matches та подію change. Властивість matches має булеве значення, яке вказує, чи задовольняються умови медіа-запиту. Подія change може бути використана для відстеження змін у відповідності медіа-запитів, що дозволяє динамічно адаптувати відображення вмісту.

Порада:

Рекомендується обережно використовувати matchMedia() у JavaScript, щоб не перевантажити клієнтську частину занадто великою кількістю перевірок або змін у відповідь на зміни розмірів вікна. Оптимальним підходом є комбінування matchMedia() з CSS медіа-запитами, використовуючи JavaScript лише для тих випадків, коли стилі CSS не вистачає.

Порада:

Ефективне застосування matchMedia() передбачає розуміння логіки медіа-запитів та їх синтаксису. Наприклад, використання window.matchMedia("(max-width: 800px) and (orientation: portrait)") дозволяє реалізувати специфічну логіку для пристроїв з максимальною шириною в 800 пікселів та портретною орієнтацією. Поряд з цим, слід звернути увагу на точність та правильність формулювання медіа-запитів, щоб уникнути помилок у визначенні відповідності.

Синтаксис

matchMedia(mediaQueryString)

Параметри

*mediaQueryString

Рядок, що визначає запит медіа-запиту для аналізу у об'єкті MediaQueryList.

Return

object

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

Переглядачі

Переглядач

9

6

5.1

12.1

12

Переглядач

3

18

6

5

Переглядач

-

-

Приклади


Цей приклад використовує matchMedia() для визначення, чи розмір вікна менше або дорівнює 768px, і виводить відповідне повідомлення на сторінці. При зміні розміру вікна обробник події перевіряє умову matches об'єкта mediaQuery та змінює текст на сторінці відповідно до поточного розміру вікна.

У цьому прикладі ми створюємо об'єкт mediaQuery, який використовує метод matchMedia() для перевірки розміру вікна. Потім ми додаємо обробник події handleWindowChange, який буде викликатися при зміні розміру вікна. В обробнику ми перевіряємо, чи відповідає поточний розмір вікна заданій умові і виводимо відповідне повідомлення у консоль.

// Створюємо об'єкт MediaQueryList для перевірки розміру вікна
const mediaQuery = window.matchMedia("(max-width: 768px)");

// Додаємо обробник події для зміни стану вікна
function handleWindowChange(event) {
  if (event.matches) {
    // Виконуємо код, якщо розмір вікна менше або дорівнює 768px
    console.log("Вікно менше або дорівнює 768px");
  } else {
    // Виконуємо код, якщо розмір вікна більше 768px
    console.log("Вікно більше 768px");
  }
}

// Додаємо обробник події до об'єкта MediaQueryList
mediaQuery.addListener(handleWindowChange);

// Викликаємо обробник для поточного стану вікна
handleWindowChange(mediaQuery);

У цьому складнішому прикладі ми використовуємо matchMedia() для визначення підтримки темної та світлої теми браузера користувачем. Залежно від налаштувань користувача, ми встановлюємо темну або світлу тему на сторінці, додаючи або видаляючи клас dark-theme відповідно.

// Створюємо об'єкт MediaQueryList для визначення підтримки темної та світлої теми
const prefersDarkTheme = window.matchMedia("(prefers-color-scheme: dark)");

// Функція для встановлення теми сторінки
function setTheme() {
  if (prefersDarkTheme.matches) {
    // Встановлюємо темну тему
    document.body.classList.add("dark-theme");
  } else {
    // Встановлюємо світлу тему
    document.body.classList.remove("dark-theme");
  }
}

// Викликаємо функцію для встановлення початкової теми
setTheme();

// Додаємо обробник події для зміни теми
prefersDarkTheme.addListener(setTheme);