如何获取浏览器视口尺寸?

IT技术 javascript cross-browser viewport
2021-02-03 04:47:56

我想让我的访问者能够看到高质量的图像,有什么方法可以检测窗口大小吗?

或者更好的是,使用 JavaScript 的浏览器的视口大小?在此处查看绿色区域:

6个回答

跨浏览器 @media (width)@media (height)值 

const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)
const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)

window.innerWidthwindow.innerHeight

  • 获取CSS 视口 @media (width)@media (height)包含滚动条
  • initial-scale和缩放变化可能会导致移动值错误地缩小到 PPK 所谓的视觉视口并小于这些@media
  • 由于本机舍入,缩放可能会导致值偏离 1px
  • undefined 在 IE8-

document.documentElement.clientWidth.clientHeight


资源

不同屏幕尺寸变量/解决方案现场测试:ryanve.com/lab/dimensions
2021-03-16 04:47:56
除非我遗漏了什么,否则这个答案是错误的。在 Chrome 中,至少document.documentElement.clientHeight返回页面高度,同时window.innerHeight返回视口高度巨大差距。
2021-03-19 04:47:56
我对移动设备上的客户端宽度/高度不满意,真的是tripleodeon.com/wp-content/uploads/2011/12/table.html
2021-03-26 04:47:56
只是想提一下,在 IE8(也许还有其他)中,您必须<!DOCTYPE html>在页面顶部放置 才能使代码正常工作。
2021-04-01 04:47:56
@01100001 替换$verge. 如果您想集成到 jQuery 中,请执行jQuery.extend(verge). 请参阅:verge.airve.com/#static
2021-04-03 04:47:56

jQuery 维度函数

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

警告这些维度不包括滚动条(在不同的浏览器和平台中具有不同的大小),因此它们与 css 媒体查询不匹配,但这里的其他答案确实解决了这个问题。
2021-03-12 04:47:56
@AlejandroIglesias:不,我只是在此 SO 页面上对其进行了测试。$(window).height();返回 536,而$("html").height();返回 10599
2021-03-15 04:47:56
这不会获取视口大小,而是获取整体文档大小。尝试一下。
2021-03-17 04:47:56
对于将其插件工具栏显示为带有固定定位的 HTML 的浏览器,此解决方案不起作用,特别是如果您想在代码中使用顶部定位和百分比。
2021-04-05 04:47:56
@allyourcode,不可能,jQuery 是所有.
2021-04-09 04:47:56

您可以使用window.innerWidthwindow.innerHeight属性。

内部高度与外部高度

@CMSdocument.documentElement.clientWidthwindow.innerWidth
2021-03-11 04:47:56
火狐测试版?那是属于博物馆的东西。
2021-03-21 04:47:56
即使这在 IE +1 中对于图表不起作用:D。对于这样的问题,不拥有更多这些应该是一种犯罪。
2021-03-24 04:47:56
@ryanve 如果“更准确”是指“甚至不远程做同样的事情”,那么是的:P
2021-03-28 04:47:56
@boxed 在移动 Safari 中,document.documentElement.clientWidth给我视口宽度,而 window.innerWidth 给我文档宽度。是的,就是这样。
2021-04-07 04:47:56

如果你不使用 jQuery,它会变得丑陋。这是一个应该适用于所有新浏览器的代码段。IE 中的 Quirks 模式和标准模式下的行为不同。这会照顾它。

var elem = (document.compatMode === "CSS1Compat") ? 
    document.documentElement :
    document.body;

var height = elem.clientHeight;
var width = elem.clientWidth;
您正在使用clientHeight的上document.documentElement元素,这将给你的视口大小。要获得文档大小,您需要执行document.body.clientHeight. 正如 Chetan 解释的那样,这种行为适用于现代浏览器。这很容易测试。只需打开一个控制台并document.documentElement.clientHeight在几个打开的选项卡上输入。
2021-03-15 04:47:56
这不是给你页面的高度,而不是视口吗?这就是这个页面似乎表明的内容:developer.mozilla.org/en/DOM/element.clientHeight
2021-04-08 04:47:56

我查看并找到了一种跨浏览器的方式:

function myFunction(){
  if(window.innerWidth !== undefined && window.innerHeight !== undefined) { 
    var w = window.innerWidth;
    var h = window.innerHeight;
  } else {  
    var w = document.documentElement.clientWidth;
    var h = document.documentElement.clientHeight;
  }
  var txt = "Page size: width=" + w + ", height=" + h;
  document.getElementById("demo").innerHTML = txt;
}
<!DOCTYPE html>
<html>
  <body onresize="myFunction()" onload="myFunction()">
   <p>
    Try to resize the page.
   </p>
   <p id="demo">
    &nbsp;
   </p>
  </body>
</html>

请注意,stackoverflow 在代码片段周围使用 iframe 会弄乱结果
2021-03-29 04:47:56
每隔一段时间,我就会遇到一个答案,该答案对解决方案和理解它是如何工作的来说是一个直接的打击。我希望我能给这 10 个赞而不是一个。为了使用 F12 移动模拟器以交互方式完成这项工作,我发现页面 <head> <meta name="viewport" content="width=device-width, user-scalable=no, maximum-scale=1.0 中需要这个标签, 最小比例=1.0" />
2021-04-05 04:47:56
@pghcpa 我希望我能给你的评论 10 票而不是 1 票。该元标记是救星。
2021-04-08 04:47:56