Spec-Zone.ru › CSS

Программирование медиа-запросов

Интерфейс DOM предоставляет возможности для программирования проверки результатов медиа-запроса с помощью интерфейса MediaQueryList и его методов и свойств. После создания объекта MediaQueryList, вы можете проверить результат запроса или получить уведомления о его изменении.

Создание списка медиа-запросов

Прежде чем вы сможете оценить результаты медиа-запроса, вам необходимо создать объект MediaQueryList, представляющий запрос. Для этого используйте метод window.matchMedia.

Например, чтобы настроить список запросов, определяющих, находится ли устройство в ландшафтном или портретном ориентации:

const mediaQueryList = window.matchMedia("(orientation: portrait)");

Проверка результата запроса

После создания списка медиа-запросов вы можете проверить результат запроса, посмотрев значение его свойства matches:

if (mediaQueryList.matches) {
  /* The viewport is currently in portrait orientation */
} else {
  /* The viewport is not currently in portrait orientation, therefore landscape */
}

Получение уведомлений о запросе

Если вам необходимо отслеживать изменения в результатах запроса в режиме реального времени, эффективнее зарегистрировать слушатель, чем постоянно проверять результат запроса. Для этого вызовите метод addEventListener() на объекте MediaQueryList с функцией обратного вызова, которая будет вызываться при изменении состояния медиа-запроса (например, при переходе теста медиа-запроса от true к false):

// Create the query list.
const mediaQueryList = window.matchMedia("(orientation: portrait)");

// Define a callback function for the event listener.
function handleOrientationChange(mql) {
  // …
}

// Run the orientation change handler once.
handleOrientationChange(mediaQueryList);

// Add the callback function as a listener to the query list.
mediaQueryList.addEventListener("change", handleOrientationChange);

Этот код создает список медиа-запросов, проверяющий ориентацию, и добавляет к нему обработчик событий. После определения обработчика мы также вызываем его непосредственно. Это позволяет нашему обработчику вносить коррективы, основанные на текущей ориентации устройства; в противном случае наш код мог бы предположить, что устройство находится в портретном режиме при запуске, даже если на самом деле оно в ландшафтном.

Функция handleOrientationChange() будет анализировать результат запроса и обрабатывать необходимые действия при изменении ориентации:

function handleOrientationChange(evt) {
  if (evt.matches) {
    /* The viewport is currently in portrait orientation */
  } else {
    /* The viewport is currently in landscape orientation */
  }
}

Выше, мы определяем параметр как evt — объект события типа MediaQueryListEvent, который также включает свойства media и matches, чтобы вы могли получить эти характеристики объекта MediaQueryList, напрямую обращаясь к нему или к объекту события.

Остановка уведомлений о запросе

Чтобы прекратить получение уведомлений об изменениях значения вашего медиа-запроса, вызовите removeEventListener() на объекте MediaQueryList, передав ему имя ранее определенной функции обратного вызова:

mediaQueryList.removeEventListener("change", handleOrientationChange);

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
EventTarget_inheritance 39 16 55 26 14 39 55 26 14 4.0 39
Testing_media_queries 9 12 6 12.1 5.1 18 6 12.1 5 1.0 ≤37
addListener 9 12 6 12.1 5.1 18 6 12.1 5 1.0 ≤37
change_event 39 79 55 26 14 39 55 26 14 4.0 39
matches 9 12 6 12.1 5.1 18 6 12.1 5 1.0 ≤37
media 9 12 6 12.1 5.1 18 6 12.1 5 1.0 ≤37
removeListener 9 12 6 12.1 5.1 18 6 12.1 5 1.0 ≤37

См. также

  • Медиа-запросы
  • Модуль CSS медиа-запросы
  • Модуль CSS объект модели
  • window.matchMedia()
  • MediaQueryList
  • MediaQueryListEvent

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Testing_media_queries

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API