
Обратите внимание, что API, написанный в этом посте, находится в черновом состоянии, и в будущем он может измениться.
Использование медиазапросов в JavaScript
Итак, вы хотите использовать медиа-запросы в вашем коде JavaScript.
Первое, что нужно знать, это новый объект MediaQueryList . Объект MediaQueryList представляет собой список всех медиазапросов к объекту документа. Объект MediaQueryList отправляет уведомления зарегистрированным слушателям, когда медиа-запросы к документу изменяют свое состояние. Объект MediaQueryList включает в себя две функции, которые добавляют и удаляют прослушиватели: addListener и removeListener . Вот пример добавления слушателя событий:
mql.addListener(handleScreenChange);
Он также включает в себя два свойства:
- совпадения : возвращает истину, если документ соответствует списку медиазапросов, в противном случае — ложь.
- media : список медиа-запросов, хранящийся в объекте MediaQueryList .
Для того , чтобы получить MediaQueryList объект , который нужно использовать matchMedia функцию. Функция matchMedia получает строку медиа-запроса и возвращает объект MediaQueryList . Затем вы можете использовать свойство совпадений, чтобы проверить результат запроса или добавить прослушиватели событий для обработки изменений медиазапросов. В следующем примере показан скрипт, который используется для записи изменений экрана консоли:
(function () {
function resize() {
if (window.matchMedia('only screen and (max-width: 320px)').matches) {
console.log('under 320 pixels');
} else if (window.matchMedia('only screen and (min-width: 321px) and ' +
'(max-width: 1024px)').matches) {
console.log('between 320 and 1024 pixels');
} else {
console.log('higher than 1024 pixels');
}
}
window.addEventListener('resize', resize, false);
resize();
}());
В этом примере я регистрируюсь на событие изменения размера окна . Когда происходит изменение размера окна, выполняется проверка различных медиазапросов, и соответствующее сообщение записывается на консоль. Вы можете избежать регистрации в событии resize, если добавите прослушиватель в список медиазапросов:
(function () {
function resize() {
var mql = window.matchMedia('only screen and (max-width: 320px)').addListener(function () {
console.log('under 320 pixels');
});
var mql1 = window.matchMedia('only screen and (min-width: 321px) and ' +
'(max-width: 1024px)').addListener(function () {
console.log('between 320 and 1024 pixels');
});
var mql2 = window.matchMedia('only screen and (min-width: 1025px)').addListener(function () {
console.log('higher than 1024 pixels');
});
}
resize();
}());
Обратите внимание на использование removeListener, когда вам не нужно получать уведомления, когда происходят проверки медиа-запросов.
Поддержка API JavaScript медиазапроса доступна в Chrome версии 9, Firefox версии 6, IE10 и Safari версии 5.1. Opera не поддерживает этот API в настоящее время.
Резюме
Медиа-запросы помогают поддерживать адаптивный дизайн, который реагирует на различные медиа. Если вы хотите использовать медиа — запросы из JavaScript вы можете использовать MediaQueryList объект и matchMedia функцию.