如何使用JavaScript检测屏幕分辨率?


196

有没有一种方法可以适用于所有浏览器?

Answers:


295

原始答案

是。

window.screen.availHeight
window.screen.availWidth

更新 2017-11-10

来自海啸的评论:

要获得移动设备的原始分辨率,您必须乘以设备像素比率:window.screen.width * window.devicePixelRatiowindow.screen.height * window.devicePixelRatio。比率也为1的台式机也可以使用。

本(Ben)得到另一个答案:

在原始JavaScript中,这将为您提供可用的宽度/高度:

window.screen.availHeight
window.screen.availWidth

对于绝对宽度/高度,请使用:

window.screen.height
window.screen.width

15
现在还不太正确。它不考虑页面缩放的可能改变。
sergzach 2013年

7
@sergzach-在这种情况下,我将改用jQuery $(window).width(),请参阅chaim.dev的答案
BornToCode 2014年

3
使用window.screen.height和window.screen.width获取确切的屏幕尺寸(如在下一个答案中所建议)。无法获得确切尺寸的原因是它正在检查可用的宽度和高度,这意味着它将减去工具栏高度(在Windows 7/8上恰好为40px)
Jaruba 2015年

4
屏幕分辨率与window.screen.height和width匹配会更好吗?为什么要使用高度?我availWidth例如,正在返回1050,当它实际上1080
Malavos

5
@eck必须乘以window.devicePixelRatio。请参阅我对亚历山德罗斯答案的评论。
海啸

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

1
这等于window.screen。应该将其添加到现有答案中。
Gajus 2014年

3
实际上,这是正确的答案。screen.availHeight仅提供浏览器窗口中的可用高度,同时screen.height提供屏幕的确切高度。
apnerve

这将返回dpi缩放分辨率,而不是原始屏幕分辨率。
Dominic Cerisano

4
要获得移动设备的原始分辨率,您必须乘以设备像素比率:window.screen.width * window.devicePixelRatiowindow.screen.height * window.devicePixelRatio。这也将在台式机上工作,该台式机的比例为
1。– Tsunamis

台式机不一定具有1的比率
。–

34

在普通JavaScript中,这将为您提供可用的宽度/高度:

window.screen.availHeight
window.screen.availWidth

对于绝对宽度/高度,请使用:

window.screen.height
window.screen.width

上面两个都可以写而没有窗口前缀。

喜欢jQuery吗?这适用于所有浏览器,但是每个浏览器都提供不同的值。

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

19

您是指显示分辨率(例如,每英寸72点)还是像素尺寸(浏览器窗口当前为1000 x 800像素)?

屏幕分辨率使您可以知道10像素线的厚度(以英寸为单位)。像素尺寸告诉您10像素宽的水平线将占据可用屏幕高度的百分比。

由于计算机本身通常不知道屏幕的实际尺寸,而仅知道像素数,因此无法仅通过Javascript来了解显示分辨率。通常认为72 dpi ....

请注意,关于显示分辨率有很多困惑,通常人们使用术语而不是像素分辨率,但是两者有很大的不同。参见维基百科

当然,您也可以按每厘米的点数来测量分辨率。还有一个非方形点的晦涩主题。但是我离题了。



19

您还可以获取WINDOW的宽度和高度,而不必使用浏览器工具栏和...(不仅仅是屏幕尺寸)。

为此,请使用: window.innerWidthwindow.innerHeight属性。在w3schools上看到它

例如,在大多数情况下,这是显示完美居中浮动模式对话框的最佳方法。无论使用哪种分辨率方向或窗口大小,都可以使用它来计算窗口上的位置。


1
这是最有用的解决方案。window.screen.availWidth属性提供的是SCREEN,而不是视口,视口可能有所不同。对我来说,了解我实际上可以使用多少房地产,而不是浏览器的最大使用价值会变得更加有用。
Mike Mannakee

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返回undefined ...(Firefox 49)screen.orientation.angle返回一个角度,但横向模式已经为0。
Lambart '16


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

仅供将来参考:

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

3

如果要检测屏幕分辨率,则可能需要签出res插件。它允许您执行以下操作:

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

以下是该插件的作者Ryan Van Etten的一些高分辨率文章:

  • 存在2个单元集,并且它们以固定的比例不同:设备单元和CSS单元。
  • 分辨率计算为可以沿着特定CSS长度容纳的点数。
  • 单位转换:1英寸= 2.54厘米= 96像素= 72磅
  • 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}
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.