JS中的位置与大小

原文连接:http://mrzhang123.github.io/2016/08/03/js-position/javascript

最近事儿比较多,一直没时间写东西,前几天又遇到关于获取元素大小的问题,每次遇到这类问题就翻书,比较费时间,因此总结一下。java

1.元素的偏移量

元素的偏移量包括元素在屏幕上占用的全部可见的空间。元素的可见大小由其高度、宽度决定,包括全部内边距、滚动条和边框大小(注意:这里并不包括外边距)。git

图片描述

图片描述

2.客户区大小

元素的客户区大小指的是元素内容机器内边距占据空间的大小。github

图片描述

图片描述

要肯定浏览器可见窗口的大小,可使用document.documentElementdocument.body(IE7以前的版本中)。面试

从以上两个咱们能够看出元素偏移量(offset)与客户区大小(client)的区别在于有没有包含边框,客户区大小不包含边框。chrome

3.滚动大小

图片描述

scrollWidthscrollHeight主要用于肯定元素内容的实际大小。因此带有垂直滚动条的页面总高度就是document.documentElement.scrollHeight浏览器

图片描述

4.窗口大小

在现代主流浏览器中提供了四个属性肯定窗口的大小,分别为:innerWidthinnerHeightouterWidthouterHeight框架

4.1. outerWidth和outerHeight

返回浏览器窗口自己的尺寸(不管是从外层的window对象仍是从某个框架访问)spa

4.2. innerWidth和innerHeight

返回该容器中页面试图去的大小(减去边框宽度)设计

注意:

这里在《javascript高级程序设计》(第三版)中写道在chrome中outer与inner返回的值是同样的,这算是chrome的一个bug,我在chrome 53中已经修复,可是在QQ浏览器中(内核为chromium47)依旧是相等的,这须要注意!
clientWidthclientHeight

在主流浏览器中,document.docuementElement.clientWidthdocument.documentElement.clientHeight中保存的是页面视口信息。返回的值与window.innerHeightwindow.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:浏览器处于标准模式不一样模式下,获取浏览器的宽度的方法不一样,在代码中已经作了判断。

相关文章
相关标签/搜索