จะตรวจสอบความละเอียดของหน้าจอด้วย JavaScript ได้อย่างไร?


196

มีวิธีที่ใช้ได้กับเบราว์เซอร์ทั้งหมดหรือไม่

คำตอบ:


296

คำตอบเดิม

ใช่.

window.screen.availHeight
window.screen.availWidth

อัปเดต 2017-11-10

จากสึนามิในความคิดเห็น:

เพื่อให้ได้ความละเอียดพื้นเมืองของเช่นโทรศัพท์มือถือที่คุณต้องคูณด้วยอัตราส่วนพิกเซลอุปกรณ์: และwindow.screen.width * window.devicePixelRatio window.screen.height * window.devicePixelRatioสิ่งนี้จะทำงานบนเดสก์ท็อปซึ่งจะมีอัตราส่วน 1

และจากเบ็นในคำตอบอื่น:

ใน vanilla JavaScript สิ่งนี้จะให้ความกว้าง / ความสูงที่มีให้คุณ:

window.screen.availHeight
window.screen.availWidth

สำหรับความกว้าง / ความสูงสัมบูรณ์ให้ใช้:

window.screen.height
window.screen.width

16
ตอนนี้มันไม่ถูกต้องนัก มันไม่ได้พิจารณาการเปลี่ยนแปลงที่เป็นไปได้ของการซูมหน้า
sergzach

7
@sergzach - ในกรณีนี้ฉันจะใช้ jQuery $(window).width()แทนดูคำตอบของ
chaim.dev

3
ใช้ window.screen.height และ window.screen.width เพื่อรับขนาดหน้าจอที่แน่นอน (ตามที่แนะนำในคำตอบถัดไป) เหตุผลที่คุณไม่ได้รับขนาดที่แน่นอนคือมันกำลังตรวจสอบความกว้างและความสูงที่มีอยู่ซึ่งหมายความว่ามันจะลบความสูงของแถบเครื่องมือ (ซึ่งเท่ากับ 40px บน windows 7/8)
Jaruba

4
คงจะดีกว่าไหมถ้าความละเอียดของหน้าจอเป็นไปตามหน้าต่างหน้าจอความสูงและความกว้าง ทำไมมีประโยชน์ความสูง? เช่น availWidth ของฉันกลับ 1050 เมื่อจริง
1080.

5
@eckes window.devicePixelRatioคุณต้องคูณด้วย อ้างถึงความคิดเห็นของฉันเกี่ยวกับคำตอบ Alessandros
สึนามิ

49
var width = screen.width;
var height = screen.height;

1
window.screenนี้จะเทียบเท่าของ ควรเพิ่มไปยังคำตอบที่มีอยู่
Gajus

3
จริงๆแล้วนี่คือคำตอบที่ถูกต้อง screen.availHeightเพียงแค่ให้ความสูงที่มีอยู่ในหน้าต่างเบราว์เซอร์ในขณะที่screen.heightให้ความสูงที่แน่นอนของหน้าจอ
apnerve

นี่จะส่งกลับความละเอียดที่ปรับสัดส่วน dpi ไม่ใช่ความละเอียดดั้งเดิมของหน้าจอ
Dominic Cerisano

4
เพื่อให้ได้ความละเอียดพื้นเมืองของเช่นโทรศัพท์มือถือที่คุณต้องคูณด้วยอัตราส่วนพิกเซลอุปกรณ์: และwindow.screen.width * window.devicePixelRatio window.screen.height * window.devicePixelRatioสิ่งนี้จะทำงานบนเดสก์ท็อปซึ่งจะมีอัตราส่วน 1
สึนามิ

คอมพิวเตอร์เดสก์ท็อปอาจไม่จำเป็นต้องมีอัตราส่วน 1
12Me21

34

ในวานิลลา JavaScript นี้จะให้คุณพร้อมใช้งานกว้าง / สูง:

window.screen.availHeight
window.screen.availWidth

สำหรับความกว้าง / ความสูงสัมบูรณ์ให้ใช้:

window.screen.height
window.screen.width

ทั้งสองข้างต้นสามารถเขียนได้โดยไม่มีคำนำหน้าหน้าต่าง

ชอบ jQuery ไหม? สิ่งนี้ใช้ได้ในทุกเบราว์เซอร์ แต่เบราว์เซอร์แต่ละตัวมีค่าที่แตกต่าง

$(window).width()
$(window).height()

20

คุณยังสามารถรับความกว้างและความสูงของ WINDOW ได้โดยหลีกเลี่ยงแถบเครื่องมือของเบราว์เซอร์และ ... (ไม่ใช่แค่ขนาดหน้าจอ)

ในการทำเช่นนี้ให้ใช้: window.innerWidth และ window.innerHeightคุณสมบัติ ดูมันที่ w3schools

ในกรณีส่วนใหญ่มันจะเป็นวิธีที่ดีที่สุดเช่นในการแสดงกล่องโต้ตอบลอยโมดัลกึ่งกลางอย่างสมบูรณ์ มันช่วยให้คุณสามารถคำนวณตำแหน่งบนหน้าต่างได้ไม่ว่าจะใช้การวางแนวความละเอียดหรือขนาดหน้าต่างใดก็ตาม


1
นี่คือทางออกที่มีประโยชน์ที่สุด คุณสมบัติ window.screen.availWidth จะให้ SCREEN ไม่ใช่วิวพอร์ตซึ่งอาจแตกต่างกัน มันมีประโยชน์มากกว่าสำหรับฉันที่จะรู้ว่าฉันสามารถใช้อสังหาริมทรัพย์ได้จริงเท่าไร
Mike Mannakee

19

คุณหมายถึงความละเอียดการแสดงผล (เช่น 72 จุดต่อนิ้ว) หรือขนาดพิกเซล (หน้าต่างเบราว์เซอร์ปัจจุบันคือ 1,000 x 800 พิกเซล) หรือไม่

ความละเอียดหน้าจอช่วยให้คุณทราบว่าความหนาของเส้น 10 พิกเซลเป็นนิ้ว ขนาดพิกเซลบอกให้คุณทราบว่าเปอร์เซ็นต์ความสูงของหน้าจอที่มีอยู่นั้นจะถูกถ่ายด้วยเส้นแนวนอนกว้าง 10 พิกเซล

ไม่มีวิธีที่จะทราบความละเอียดของการแสดงผลจาก Javascript เนื่องจากคอมพิวเตอร์มักจะไม่ทราบขนาดที่แท้จริงของหน้าจอเพียงจำนวนพิกเซล 72 dpi เป็นปกติเดา ....

โปรดทราบว่ามีความสับสนมากมายเกี่ยวกับความละเอียดของการแสดงผลซึ่งบ่อยครั้งที่ผู้คนใช้คำศัพท์แทนความละเอียดของพิกเซล ดูWikipedia

แน่นอนคุณยังสามารถวัดความละเอียดเป็นจุดต่อซม. นอกจากนี้ยังมีวัตถุที่ไม่ชัดเจนของจุดที่ไม่ได้เป็นสแควร์ แต่ฉันเชือนแช


19

การใช้ jQuery คุณสามารถทำได้:

$(window).width()
$(window).height()

เป็นวิธีแก้ปัญหาข้าม / ทุกสิ่งที่ง่ายที่สุดที่ฉันเคยใช้ สำหรับความกว้างของเบราว์เซอร์อย่างน้อย ...
Zarne Dravitzki

34
ส่งคืนขนาดของหน้าต่างไม่ใช่ความละเอียดหน้าจอ
Jonas

13

การพยายามรับสิ่งนี้บนอุปกรณ์พกพาต้องใช้ขั้นตอนอีกสองสามขั้น screen.availWidthยังคงเหมือนเดิมโดยไม่คำนึงถึงทิศทางของอุปกรณ์

นี่คือทางออกของฉันสำหรับมือถือ:

function getOrientation(){
    return Math.abs(window.orientation) - 90 == 0 ? "landscape" : "portrait";
};
function getMobileWidth(){
    return getOrientation() == "landscape" ? screen.availHeight : screen.availWidth;
};
function getMobileHeight(){
    return getOrientation() == "landscape" ? screen.availWidth : screen.availHeight;
};

window.orientationส่งคืนไม่ได้กำหนด ... (Firefox 49) screen.orientation.angleส่งคืนมุม แต่มันอยู่ที่ 0 สำหรับโหมดแนวนอน
Lambart


4
function getScreenWidth()
{
   var de = document.body.parentNode;
   var db = document.body;
   if(window.opera)return db.clientWidth;
   if (document.compatMode=='CSS1Compat') return de.clientWidth;
   else return db.clientWidth;
}


3

หากคุณต้องการที่จะตรวจสอบความละเอียดหน้าจอคุณอาจต้องการที่จะชำระเงินปลั๊กอินละเอียด อนุญาตให้คุณทำสิ่งต่อไปนี้:

var res = require('res')
res.dppx() // 1
res.dpi() // 96
res.dpcm() // 37.79527559055118

นี่คือบางส่วนที่ดีคบมติจากไรอันแวน Etten เขียนปลั๊กอิน:

  • มี 2 ​​ชุดหน่วยและแตกต่างกันในระดับคงที่: หน่วยอุปกรณ์และหน่วย CSS
  • ความละเอียดจะคำนวณตามจำนวนจุดที่สามารถปรับได้ตามความยาว CSS เฉพาะ
  • การแปลงหน่วย: 1⁢in = 2.54⁢cm = 96⁢px = 72⁢pt
  • CSS มีความยาวสัมพัทธ์และความยาวสัมบูรณ์ ในการซูมปกติ: 1⁢em = 16⁢px
  • dppx เทียบเท่ากับอัตราส่วนพิกเซลของอุปกรณ์
  • นิยาม devicePixelRatio แตกต่างกันตามแพลตฟอร์ม
  • ข้อความค้นหาสื่อสามารถกำหนดเป้าหมายความละเอียดขั้นต่ำได้ ใช้ด้วยความระมัดระวัง

นี่คือซอร์สโค้ดสำหรับ res ณ วันนี้:

!function(root, name, make) {
  if (typeof module != 'undefined' && module.exports) module.exports = make()
  else root[name] = make()
}(this, 'res', function() {

  var one = {dpi: 96, dpcm: 96 / 2.54}

  function ie() {
    return Math.sqrt(screen.deviceXDPI * screen.deviceYDPI) / one.dpi
  }

  function dppx() {
    // devicePixelRatio: Webkit (Chrome/Android/Safari), Opera (Presto 2.8+), FF 18+
    return typeof window == 'undefined' ? 0 : +window.devicePixelRatio || ie() || 0
  }

  function dpcm() {
    return dppx() * one.dpcm
  }

  function dpi() {
    return dppx() * one.dpi
  }

  return {'dppx': dppx, 'dpi': dpi, 'dpcm': dpcm}
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.