ทำบางอย่างถ้าความกว้างของหน้าจอน้อยกว่า 960 พิกเซล


221

ฉันจะทำให้ jQuery ทำอะไรได้ถ้าความกว้างหน้าจอของฉันน้อยกว่า 960 พิกเซล รหัสด้านล่างจะเริ่มการแจ้งเตือนครั้งที่สองเสมอโดยไม่คำนึงถึงขนาดหน้าต่างของฉัน:

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

    alert('More than 960');
}

1
คุณกำลังทำสิ่งนี้เมื่อเพจโหลดหรือเป็นเมื่อคุณปรับขนาดเบราว์เซอร์ มันเป็นความคิดที่ดีที่จะบอกว่าการแจ้งเตือน (screen.width) เพื่อดูว่าอะไรที่ใช้ในการตัดสินใจ
Farrukh Subhani

1
ทำไมไม่คำสั่งสื่อ ?
bzlm

3
ทำไมไม่สอบถามสื่อ ฉันสามารถคิดได้หลายกรณีที่การสอบถามสื่อจะไม่มีความช่วยเหลือใด ๆ หาก jdln ต้องการใช้ jQuery สมมติว่าเขามีเหตุผลที่ดีที่จะทำเช่นนั้น
ลุค

มีการใช้งานจำนวนมากสำหรับสิ่งนี้ที่การสืบค้นสื่อไม่ทำงานเช่นเปิดใช้งานเอฟเฟกต์วัสดุก่อสร้างเฉพาะในกรณีที่ความกว้างหน้าจอใหญ่กว่า 1,000 พิกเซล
Pekka

คำตอบ:


449

ใช้ jQuery เพื่อรับความกว้างของหน้าต่าง

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

11
โปรดทราบว่า $ (หน้าต่าง) .width () ไม่สอดคล้องกันในเบราว์เซอร์หากมองเห็นแถบเลื่อน ฉันพบว่าการใช้คำสั่งสื่อ javascriptนั้นมีความน่าเชื่อถือมากกว่า
forsvunnet

9
@forsvunnet ลิงก์นั้นเสียชีวิต
Shah Abaz Khan

2
ลิงก์ไปยังข้อความค้นหาสื่อจาวาสคริปต์: w3schools.com/howto/howto_js_media_queries.asp
Timar Ivo Batis

138

คุณอาจต้องการรวมเข้ากับกิจกรรมการปรับขนาด:

 $(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


การห่อเหตุการณ์ปรับขนาดทำให้เกิดไฟไหม้เมื่อปรับขนาดไม่ใช่โหลด
Ted

5
@Ted combine it withนั่นเป็นเหตุผลที่ผมบอกว่า
jk

1
@RJ ดูการแก้ไขด้านบน ฉันไม่รู้ว่าคุณหมายถึงอะไรโดย 'ชัดเจน' เหตุการณ์ดังนั้นฉันจึงไปด้วยการป้องกันไม่ให้เหตุการณ์ยิงอีกครั้ง
jk

1
น่าอัศจรรย์ฉันพยายามคิดออกมาหลายวันแล้วว่าจะผูกequalHeightsฟังก์ชั่นการปรับขนาดอย่างไร แต่สำหรับความกว้างที่มากกว่า 768 เท่านั้นมันใช้งานได้ดี ขอบคุณ
แดนนี Englander

1
มันสมเหตุสมผลแล้วที่จะเพิ่มเหตุการณ์การปรับขนาดหลังจากรหัสนั้นเพื่อให้โหลดสิ่งที่ขนาดปัจจุบันของเบราว์เซอร์ก็จะเรียกใช้รหัสที่ต้องการ
BennKingy

16

ฉันแนะนำให้ไม่ใช้ jQuery สำหรับสิ่งดังกล่าวและดำเนินการต่อwindow.innerWidth:

if (window.innerWidth < 960) {
    doSomething();
}

1
ทำไมดีกว่าไม่ใช้ jQuery
raison

1
@raison ฉันพบว่า $ (หน้าต่าง). width () จะไม่รวมแถบเลื่อน - ดังนั้นถ้าคุณมี secreen ที่ 960px มันจะคืน 944px และ js ของคุณจะไม่ทำงานตามที่ตั้งใจไว้ วิธีการแก้ปัญหานี้จะกลับ 960px
ฌอน T

14

คุณสามารถใช้แบบสอบถามสื่อด้วยจาวาสคริปต์

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


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>


-8

ไม่สิ่งนี้จะไม่ทำงาน สิ่งที่คุณต้องการคือนี่ !!!

ลองสิ่งนี้:

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

3
การโพสต์ลิงก์ไม่ใช่คำตอบ
nedaRM

ขอโทษด้วยที่ฉันรู้สึกว่ากำลังรีบ! เดี๋ยวก่อนฉันกำลังทำอยู่ตอนนี้ ...
Saurav Chaudhary

โปรดทราบว่า screen.width (ดีที่สุดdocument.body.clientWidthถ้าใช้ vanilla JS) คือ <= 960 (หมายถึงคำสั่ง if ที่นี่) ดังนั้นตัวเลือกอื่น ๆ เท่านั้น (ELSE คือ screen.width> 960) ดังนั้นจึงใช้อย่างอื่นหากนี่ซ้ำซ้อน ใช้document.body.clientWidth <=960 ? handleSmallerThan960() : handleLargerThan960()หรือตัวแปรบางอย่าง ไม่จำเป็นต้องมีอย่างอื่นหาก (รหัสซ้ำซ้อน)
Zargold
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.