Làm cách nào để phát hiện độ phân giải màn hình bằng JavaScript?


196

Có cách nào hoạt động cho tất cả các trình duyệt không?

Câu trả lời:


296

câu trả lời gốc

Đúng.

window.screen.availHeight
window.screen.availWidth

cập nhật 2017-11-10

Từ Tsunamis trong các ý kiến:

Để có được độ phân giải gốc của thiết bị di động, bạn phải nhân với tỷ lệ pixel của thiết bị: window.screen.width * window.devicePixelRatiowindow.screen.height * window.devicePixelRatio. Điều này cũng sẽ hoạt động trên máy tính để bàn, sẽ có tỷ lệ 1.

Và từ Ben trong một câu trả lời khác:

Trong vanilla JavaScript, điều này sẽ cung cấp cho bạn chiều rộng / chiều cao CÓ S: N:

window.screen.availHeight
window.screen.availWidth

Đối với chiều rộng / chiều cao tuyệt đối, sử dụng:

window.screen.height
window.screen.width

16
Bây giờ nó không hoàn toàn chính xác. Nó không xem xét khả năng thay đổi thu phóng trang.
sergzach

7
@sergzach - Trong trường hợp đó tôi sẽ sử dụng jQuery $(window).width()thay vào đó, hãy xem câu trả lời của
chaim.dev

3
Sử dụng window.screen.height và window.screen. Thong để có kích thước màn hình chính xác (như được đề xuất trong câu trả lời tiếp theo). Lý do bạn không nhận được kích thước chính xác là vì nó kiểm tra chiều rộng và chiều cao có sẵn, điều này có nghĩa là nó sẽ trừ đi chiều cao của thanh công cụ (chính xác là 40px trên windows 7/8)
Jaruba

4
Sẽ không tốt hơn, cho độ phân giải màn hình đi cùng với window.screen.height và width? Tại sao lại có sẵn? Chẳng hạn như availWidth của tôi, sẽ trở lại vào năm 1050, khi nó thực sự là 1080.
Malavos

5
@eckes bạn phải nhân với window.devicePixelRatio. Tham khảo nhận xét của tôi về câu trả lời của Alessandros.
Sóng thần

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

1
Điều này là tương đương với window.screen. Chỉ nên thêm nó vào câu trả lời hiện có.
Gajus

3
Thật ra đây là câu trả lời đúng. screen.availHeightchỉ cung cấp chiều cao có sẵn trong cửa sổ trình duyệt trong khi screen.heightcho chiều cao chính xác của màn hình.
xin lỗi

Điều này trả về độ phân giải tỷ lệ dpi, không phải độ phân giải màn hình gốc.
Đaminh Cerisano

4
Để có được độ phân giải gốc của thiết bị di động, bạn phải nhân với tỷ lệ pixel của thiết bị: window.screen.width * window.devicePixelRatiowindow.screen.height * window.devicePixelRatio. Điều này cũng sẽ hoạt động trên máy tính để bàn, sẽ có tỷ lệ 1.
Tsunamis

Máy tính để bàn không nhất thiết phải có tỷ lệ 1.
12Me21

34

Trong vanilla JavaScript, điều này sẽ cung cấp cho bạn chiều rộng / chiều cao CÓ S : N:

window.screen.availHeight
window.screen.availWidth

Đối với chiều rộng / chiều cao tuyệt đối, sử dụng:

window.screen.height
window.screen.width

Cả hai điều trên có thể được viết mà không có tiền tố cửa sổ.

Giống như jQuery? Điều này hoạt động trong tất cả các trình duyệt, nhưng mỗi trình duyệt cho các giá trị khác nhau.

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

19

Bạn có nghĩa là độ phân giải màn hình (ví dụ 72 chấm trên mỗi inch) hoặc kích thước pixel (cửa sổ trình duyệt hiện là 1000 x 800 pixel)?

Độ phân giải màn hình cho phép bạn biết một dòng 10 pixel sẽ dày bao nhiêu inch. Kích thước pixel cho bạn biết bao nhiêu phần trăm chiều cao màn hình khả dụng sẽ được chiếm bởi một đường ngang rộng 10 pixel.

Không có cách nào để biết độ phân giải màn hình chỉ từ Javascript vì bản thân máy tính thường không biết kích thước thực của màn hình, chỉ là số pixel. 72 dpi là dự đoán thông thường ....

Lưu ý rằng có rất nhiều nhầm lẫn về độ phân giải màn hình, thường mọi người sử dụng thuật ngữ thay vì độ phân giải pixel, nhưng hai loại này khá khác nhau. Xem Wikipedia

Tất nhiên, bạn cũng có thể đo độ phân giải bằng số chấm trên mỗi cm. Ngoài ra còn có chủ đề tối nghĩa của các chấm không vuông. Nhưng tôi lạc đề.


19

Sử dụng jQuery bạn có thể làm:

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

Đây là giải pháp chéo / mọi thứ dễ dàng nhất mà tôi đã sử dụng. Đối với chiều rộng trình duyệt ít nhất ...
Zarne Dravitzki

34
Điều này trả về kích thước của cửa sổ, không phải độ phân giải màn hình.
Jonas

19

Bạn cũng có thể lấy chiều rộng và chiều cao của WINDOW, tránh các thanh công cụ của trình duyệt và ... (không chỉ kích thước màn hình).

Để làm điều này, sử dụng: window.innerWidthwindow.innerHeightcác thuộc tính. Xem nó tại w3schools .

Trong hầu hết các trường hợp, đó sẽ là cách tốt nhất, ví dụ, để hiển thị một hộp thoại phương thức nổi tập trung hoàn hảo. Nó cho phép bạn tính toán các vị trí trên cửa sổ, bất kể định hướng độ phân giải hoặc kích thước cửa sổ đang sử dụng trình duyệt.


1
Đây là giải pháp hữu ích nhất. Thuộc tính window.screen.availWidth cung cấp cho SCREEN, không phải khung nhìn, có thể khác nhau. Nó hữu ích hơn đối với tôi để biết tôi thực sự có thể sử dụng bao nhiêu bất động sản, chứ không phải mức tối đa của trình duyệt có thể trở thành.
Mike Mannakee

13

Cố gắng để có được điều này trên một thiết bị di động đòi hỏi một vài bước nữa. screen.availWidthgiữ nguyên bất kể định hướng của thiết bị.

Đây là giải pháp của tôi cho điện thoại di động:

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.orientationtrả về không xác định ... (Firefox 49) screen.orientation.angletrả về một góc, nhưng nó đã ở 0 cho chế độ ngang.
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;
}

4

chỉ để tham khảo trong tương lai:

function getscreenresolution()
{
    window.alert("Your screen resolution is: " + screen.height + 'x' + screen.width);
}

3

Nếu bạn muốn phát hiện độ phân giải màn hình, bạn có thể muốn kiểm tra độ phân giải của plugin . Nó cho phép bạn làm như sau:

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

Dưới đây là một số giải pháp tuyệt vời từ Ryan Van Etten, tác giả của plugin:

  • 2 bộ đơn vị tồn tại và khác nhau ở một tỷ lệ cố định: đơn vị thiết bị và đơn vị CSS.
  • Độ phân giải được tính bằng số lượng chấm có thể vừa với chiều dài CSS cụ thể.
  • Chuyển đổi đơn vị: 1⁢in = 2.54⁢cm = 96⁢px = 72⁢pt
  • CSS có độ dài tương đối và tuyệt đối. Ở mức thu phóng bình thường: 1⁢em = 16⁢px
  • dppx tương đương với tỷ lệ pixel của thiết bị.
  • Định nghĩa devicePixelRatio khác nhau theo nền tảng.
  • Truy vấn phương tiện có thể nhắm mục tiêu độ phân giải tối thiểu. Sử dụng cẩn thận cho tốc độ.

Đây là mã nguồn cho độ phân giải, tính đến ngày hôm nay:

!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}
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.