原文连接:http://mrzhang123.github.io/2016/08/03/js-position/javascript
最近事儿比较多,一直没时间写东西,前几天又遇到关于获取元素大小的问题,每次遇到这类问题就翻书,比较费时间,因此总结一下。java
元素的偏移量包括元素在屏幕上占用的全部可见的空间。元素的可见大小由其高度、宽度决定,包括全部内边距、滚动条和边框大小(注意:这里并不包括外边距)。git
元素的客户区大小指的是元素内容机器内边距占据空间的大小。github
要肯定浏览器可见窗口的大小,可使用document.documentElement
或document.body
(IE7以前的版本中)。面试
从以上两个咱们能够看出元素偏移量(offset)与客户区大小(client)的区别在于有没有包含边框,客户区大小不包含边框。chrome
scrollWidth
和scrollHeight
主要用于肯定元素内容的实际大小。因此带有垂直滚动条的页面总高度就是document.documentElement.scrollHeight
。浏览器
在现代主流浏览器中提供了四个属性肯定窗口的大小,分别为:innerWidth
、innerHeight
、outerWidth
和outerHeight
。框架
返回浏览器窗口自己的尺寸(不管是从外层的window对象仍是从某个框架访问)spa
返回该容器中页面试图去的大小(减去边框宽度)设计
注意:
这里在《javascript高级程序设计》(第三版)中写道在chrome中outer与inner返回的值是同样的,这算是chrome的一个bug,我在chrome 53中已经修复,可是在QQ浏览器中(内核为chromium47)依旧是相等的,这须要注意!clientWidth
和clientHeight
。
在主流浏览器中,document.docuementElement.clientWidth
和document.documentElement.clientHeight
中保存的是页面视口信息。返回的值与window.innerHeight
,window.innerWidth
同样。
可是window.innerHeight
在IE8及如下浏览器中结果是undefined
,而document.documentElement.clientHeight
还有值。因此在各个浏览器下取得页面视口大小的代码以下:
var pageWidth=window.innerWidth, pageHeight=window.innerHeight; if(typeof pageWidth !== 'number'){ if(document.compatMode === 'CSS1Compat'){ pageWidth=document.documentElement.clientWidth; pageHeight=document.documentElement.clientHeight; }else{ pageWidth=document.body.clientWidth; pageHeight=document.body.clientHeight; } }
代码中document.compatMode
用于判断浏览器处于什么模式,它有两个值:BackCompat
:浏览器处于怪异模式CSS1Compat
:浏览器处于标准模式不一样模式下,获取浏览器的宽度的方法不一样,在代码中已经作了判断。