Сделайте что-нибудь, если ширина экрана меньше 960 пикселей

221

Как я могу заставить jQuery что-то делать, если ширина моего экрана меньше 960 пикселей? Код ниже всегда запускает 2-е предупреждение независимо от размера моего окна:

if (screen.width < 960) {
    alert('Less than 960');
}
else {

    alert('More than 960');
}
Evanss
источник
1
Вы делаете это при загрузке страницы или когда вы изменяете размер браузера. Это всегда хорошая идея, чтобы предупредить (screen.width), чтобы увидеть, что было использовано для принятия решения.
Фаррух Субхани
1
Почему не медиа-запросы ?
bzlm
3
Почему не медиа-запросы? Я могу вспомнить любое количество случаев, когда медиазапросы были бы бесполезны. Если jdln хочет использовать jQuery, давайте предположим, что у него есть веские причины для этого.
Люк
Для этого есть множество применений, когда медиа-запросы не работают, например, чтобы активировать эффект масонства, только если ширина экрана превышает, скажем, 1000 пикселей.
Пекка

Ответы:

449

Используйте jQuery, чтобы получить ширину окна.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
азиз пунджани
источник
11
Обратите внимание, что $ (window) .width () не одинаково для всех браузеров, если полоса прокрутки видна. Я обнаружил, что использование медиа-запросов javascript намного надежнее.
forsvunnet
9
@forsvunnet Эта ссылка мертва.
Шах Абаз Хан
2
Ссылка на javascript медиа-запросы: w3schools.com/howto/howto_js_media_queries.asp
Тимар Иво Батис
137

Возможно, вы захотите объединить его с событием изменения размера:

 $(window).resize(function() {
  if ($(window).width() < 960) {
     alert('Less than 960');
  }
 else {
    alert('More than 960');
 }
});

Для RJ:

var eventFired = 0;

if ($(window).width() < 960) {
    alert('Less than 960');

}
else {
    alert('More than 960');
    eventFired = 1;
}

$(window).on('resize', function() {
    if (!eventFired) {
        if ($(window).width() < 960) {
            alert('Less than 960 resize');
        } else {
            alert('More than 960 resize');
        }
    }
});

Я попытался http://api.jquery.com/off/ безуспешно, поэтому я пошел с флагом eventFired.

JK.
источник
Обтекание в событии изменения размера приводит к тому, что оно срабатывает только при изменении размера, а не при загрузке.
Тед
5
@Ted Вот почему я сказал combine it with.
JK.
1
@RJ см. Правки выше. Я не знаю, что вы имеете в виду под «очисткой» события, поэтому я решил не запускать событие снова.
JK.
1
Фантастически, я несколько дней пытался выяснить, как привязать equalHeightsфункцию к изменению размера, но только для ширины, превышающей 768. Это работает как шарм. Спасибо
Дэнни Энгландер
1
После этого кода имеет смысл добавить событие изменения размера, чтобы при загрузке, независимо от текущего размера браузера, он запускал необходимый код
BennKingy
16

Я рекомендую не использовать jQuery для таких вещей и продолжить window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Даниэль Кмак
источник
1
почему бы не использовать jQuery?
Сезон
1
@ raison Я обнаружил, что $ (window) .width () не будет включать полосы прокрутки - поэтому, если у вас есть экран размером 960px, он вернет 944px, а ваши js не сработают, как предполагалось. это решение вернет 960px
Шон Т
14

Вы также можете использовать медиа-запрос с Javascript.

const mq = window.matchMedia( "(min-width: 960px)" );

if (mq.matches) {
       alert("window width >= 960px");
} else {
     alert("window width < 960px");
}

источник
11

Я хотел бы предложить (JQuery необходимо):

/*
 * windowSize
 * call this function to get windowSize any time
 */
function windowSize() {
  windowHeight = window.innerHeight ? window.innerHeight : $(window).height();
  windowWidth = window.innerWidth ? window.innerWidth : $(window).width();

}

//Init Function of init it wherever you like...
windowSize();

// For example, get window size on window resize
$(window).resize(function() {
  windowSize();
  console.log('width is :', windowWidth, 'Height is :', windowHeight);
  if (windowWidth < 768) {
    console.log('width is under 768px !');
  }
});

Добавлено в CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Тогда вы можете легко получить ширину окна с помощью var: windowWidth и Height с помощью: windowHeight

в противном случае получите библиотеку js: http://wicky.nillia.ms/enquire.js/

Моаби
источник
11
// Adds and removes body class depending on screen width.
function screenClass() {
    if($(window).innerWidth() > 960) {
        $('body').addClass('big-screen').removeClass('small-screen');
    } else {
        $('body').addClass('small-screen').removeClass('big-screen');
    }
}

// Fire.
screenClass();

// And recheck when window gets resized.
$(window).bind('resize',function(){
    screenClass();
});
leymannx
источник
9

использование

$(window).width()

или

$(document).width()

или

$('body').width()
охрана
источник
8

Я знаю, что опаздываю, чтобы ответить на это, но я надеюсь, что это поможет некоторым, у кого есть подобные проблемы. Это также работает, когда страница обновляется по любой причине.

$(document).ready(function(){

if ($(window).width() < 960 && $(window).load()) {
        $("#up").hide();
    }

    if($(window).load()){
        if ($(window).width() < 960) {
        $("#up").hide();
        }
    }

$(window).resize(function() {
    if ($(window).width() < 960 && $(window).load()) {
        $("#up").hide();
    }
    else{
        $("#up").show();
    }

    if($(window).load()){
        if ($(window).width() < 960) {
        $("#up").hide();
        }
    }
    else{
        $("#up").show();
    }

});});
Велько Стефанович
источник
1

Попробуйте этот код

if ($(window).width() < 960) {
 alert('width is less than 960px');
}
else {
 alert('More than 960');
}

   if ($(window).width() < 960) {
     alert('width is less than 960px');
    }
    else {
     alert('More than 960');
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

JIBIN BJ
источник
-8

Нет, ничего из этого не будет работать. Что вам нужно это !!!

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

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Саурав Чаудхари
источник
3
Размещение ссылки не является ответом.
НедРМ
извини за то, что спешил! Подождите минуту, я делаю это прямо сейчас ...
Саурав Чаудхари
обратите внимание, если screen.width (лучше всего захватывается document.body.clientWidthпри использовании vanilla JS) <= 960 (имеется в виду оператор if здесь), тогда единственный другой вариант (ELSE - это screen.width> 960), поэтому используйте else, если здесь избыточно. использовать document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()или какой-то вариант. НЕТ необходимости в другом if (избыточный код)
Zargold