教你如何获取浏览器窗口大小

西蒙
2017-08-08 / 0 评论 / 237 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年05月26日,已超过310天没有更新,若内容或图片失效,请留言反馈。

我们经常会遇到这样的需求:获取当前浏览器窗口大小,然后根据其大小来对页面进行样式设计。那么怎么去获取呢?

源代码

先来看这样一段代码:

function getBrowserSize() {
  var de = document.documentElement;
  return {
    'width': (
      window.innerWidth
      || de && de.clientWidth
      || document.body.clientWidth
    ),
    'height': (
      window.innerHeight
      || de && de.clientHeight
      || document.body.clientHeight
    )
  };
}

这段代码就是用来获取浏览器窗口大小的,我们来看看其中用到的一些知识点。

  • documentElement:document.documentElement获取的是页面中的<html>元素,也就相当于整个页面。
  • innerWidth&&innerHeight: innerWidth获取的是可视区域的宽度,但包括垂直滚动条;innerHeight则只包括可视区域高度,不包括功能框之类的。相比较之下,outerWidth和outerHeight则包含整个窗口的高度,包括功能框、滚动条之类的。
  • document.body:获取页面中body元素。
  • Element.clientWidth:获取元素的可视宽度(高度),它包括padding但不包括滚动条、bordermargin

实际测试

经过浏览器测试得出结论:

  • window.innerWidthwindow.outerWidth基本是一样的,因为innerWidth也包括了滚动条,但如果侧面有功能栏的话,innerWidth就会比outerWidth小;window.innerHeightwindow.outerHeight差别较大,因为下面有调试栏。
  • document.documentElement.clientWidth(clientHeight)获取的就是页面的可视窗口宽高,不包括滚动条和功能栏之类的。
  • document.body.clientWidth(clientHeight)获取的是body元素的宽高,不包括滚动条,但因为body的内容高度有465px,所以比document.documentElement.clientHeight要高。

兼容性

document.documentElement几乎每个浏览器都兼容;window.outerWidthwindow.innerWidthIE8及以下都不支持;document.bodyclientWidthIE6之前不支持。

总结

获取浏览器当前窗口大小,一般用window.innerWidth(innerHeight)就好了,但如果不兼容,则次之用document.documentElement.clientWidth(clientHeight),再不行就只能用document.body获取了。

前面提到的getBrowserSize()方法就是使用了这种理念。

参考资料:
documentElement
innerWidth
outerWidth
document.body
clientWidth
《JavaScriptDOM高级程序设计》

0

评论 (0)

取消