Lakukan sesuatu jika lebar layar kurang dari 960 px

221

Bagaimana saya bisa membuat jQuery melakukan sesuatu jika lebar layar saya kurang dari 960 piksel? Kode di bawah ini selalu mengaktifkan peringatan ke-2, terlepas dari ukuran jendela saya:

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

    alert('More than 960');
}
Evans
sumber
1
Apakah Anda melakukan ini saat halaman dimuat atau saat Anda mengubah ukuran browser. Itu selalu ide yang baik untuk mengatakan waspada (screen.width) untuk melihat apa yang telah digunakan untuk memutuskan.
Farrukh Subhani
1
Mengapa bukan pertanyaan media ?
bzlm
3
Mengapa bukan pertanyaan media? Saya dapat memikirkan sejumlah kasus di mana pertanyaan media tidak akan membantu sama sekali. Jika jdln ingin menggunakan jQuery, mari kita asumsikan dia punya alasan bagus untuk melakukannya.
Luke
Ada banyak kegunaan untuk ini di mana kueri media tidak berfungsi, misalnya untuk mengaktifkan efek pasangan bata hanya jika lebar layar lebih besar dari, katakanlah, 1000 piksel.
Pekka

Jawaban:

449

Gunakan jQuery untuk mendapatkan lebar jendela.

if ($(window).width() < 960) {
   alert('Less than 960');
}
else {
   alert('More than 960');
}
aziz punjani
sumber
11
Perhatikan bahwa $ (window) .width () tidak konsisten di seluruh browser jika bilah gulir terlihat. Saya telah menemukan bahwa menggunakan kueri media javascript jauh lebih dapat diandalkan.
forsvunnet
9
@ forsvunnet Tautan itu sudah mati.
Shah Abaz Khan
2
Tautan ke permintaan media javascript: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis
137

Anda mungkin ingin menggabungkannya dengan acara pengubahan ukuran:

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

Untuk 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');
        }
    }
});

Saya mencoba http://api.jquery.com/off/ tetapi tidak berhasil, jadi saya pergi dengan flag eventFired.

jk.
sumber
Membungkus dalam acara pengubahan ukuran hanya membuatnya menyala pada pengubahan ukuran, bukan pada beban.
Ted
5
@Ted Itu sebabnya saya katakan combine it with.
jk.
1
@RJ lihat hasil edit di atas. Saya tidak tahu apa yang Anda maksud dengan 'menghapus' suatu acara, jadi saya pergi dengan mencegah peristiwa tersebut terjadi lagi.
jk.
1
Fantastis, saya telah mencoba mencari tahu selama berhari-hari cara mengikat equalHeightsfungsi pada ukuran tetapi untuk lebar hanya lebih besar dari 768. Ini berfungsi seperti pesona. Terima kasih
Danny Englander
1
Masuk akal untuk menambahkan acara pengubahan ukuran setelah kode itu, sehingga saat memuat apa pun ukuran browser saat ini, maka ia akan menjalankan kode yang diperlukan
BennKingy
16

Saya sarankan untuk tidak menggunakan jQuery untuk hal seperti itu dan lanjutkan dengan window.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}
Daniel Kmak
sumber
1
mengapa lebih baik tidak menggunakan jQuery?
raison
1
@raison Saya menemukan bahwa $ (jendela) .width () tidak akan menyertakan bilah gulir - jadi jika Anda memiliki secreen 960px, itu akan mengembalikan 944px dan js Anda tidak akan menyala sebagaimana dimaksud. solusi ini akan mengembalikan 960px
Sean T
14

Anda juga dapat menggunakan kueri media dengan javascript.

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

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

sumber
11

Saya sarankan (jQuery diperlukan):

/*
 * 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 !');
  }
});

Ditambahkan dalam CodePen: http://codepen.io/moabi/pen/QNRqpY?editors=0011

Maka Anda bisa dengan mudah mendapatkan lebar jendela dengan var: windowWidth dan Height dengan: windowHeight

jika tidak, dapatkan perpustakaan js: http://wicky.nillia.ms/enquire.js/

moabi
sumber
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
sumber
9

menggunakan

$(window).width()

atau

$(document).width()

atau

$('body').width()
Menjaga
sumber
8

Saya tahu saya terlambat untuk menjawab ini, tapi saya harap ini bisa membantu siapa saja yang memiliki masalah serupa. Ini juga berfungsi saat laman diperbarui dengan alasan apa pun.

$(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();
    }

});});
Veljko Stefanovic
sumber
1

Coba kode ini

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
sumber
-8

tidak, semua ini tidak akan berfungsi. Yang Anda butuhkan adalah ini !!!

Coba ini:

if (screen.width <= 960) {
  alert('Less than 960');
} else if (screen.width >960) {
  alert('More than 960');
}
Saurav Chaudhary
sumber
3
Posting tautan bukan jawaban.
nedaRM
maaf soal itu saya agak terburu-buru! Tunggu sebentar, saya sedang melakukannya sekarang ...
Saurav Chaudhary
harap dicatat jika screen.width (paling mudah ditangkap dengan document.body.clientWidthmenggunakan vanilla JS) adalah <= 960 (artinya pernyataan if di sini) maka satu-satunya pilihan lain (ELSE adalah screen.width> 960) karena itu menggunakan yang lain jika di sini berlebihan. gunakan document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()atau beberapa varian. TIDAK perlu yang lain jika (kode redundan)
Zargold