Условные медиазапросы window.matchMedia

Я работаю с window.matchMedia() и я не могу заставить функцию применять вторичный класс, когда max or min width достигнуто Я воссоздал проблему ниже с простым изменением размера шрифта.

Я прочитал о matchMedia() и я пробовал это двумя разными способами (оба включены ниже). Нужно ли включать как минимальное, так и максимальное значение, чтобы функция выполнялась? Или я что-то упустил в реальной структуре самой функции?

$(document).ready(function() {
 
 var mq = window.matchMedia('(max-width: 700px)');
 
 if( mq.matches ) {
  $('.title').addClass('big')
 } else {
  $('.title').removeClass('big');
 }
});


/*
Second method I tried

$(function() {
 if( window.matchMedia('(max-width: 700px)').matches){
  $('.title').addClass('big')
 } else {
  $('.title').removeClass('big');
 }

});


*/
.title {
 font-size: 20px;
}

.big {
 font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 class="title">This is a title</h1>

1 ответ

Решение

Это работает, может быть, вы ожидаете, что он обнаружит изменение размера экрана? У вас есть привязка к document.ready(), поэтому вы должны обновить страницу, чтобы увидеть ее.

Попробуйте это:

  • Сделать окна меньше 700px, обновить
  • сделать окно больше, чем 700px, обновить
  • Обратите внимание на разницу:)

Другими словами:

$(document).ready(your function)

Ваша функция выполняется только один раз для каждой загрузки страницы.

В качестве альтернативы, используйте эту скрипку и запустите ее. Сделайте окно результатов больше или меньше чем 700px и запустите его снова.

Если вам нужно запускать его каждый раз, когда ширина окна изменяется, я бы рекомендовал привязать кwindow.onresize как я делал в этой скрипке с выполнением события resize

Обратите внимание на console.log, который я разместил там, чтобы вы увидели, как и когда он запускается, вы хотите удалить его перед началом производства;)

Другие вопросы по тегам