js获取元素的偏移量,客户区大小,跨浏览器获取视口大小

2017-11-21 22:47:00 4,635 views

元素大小

1.偏移量

元素的可见大小由其高度,宽度决定,包括所有内边距,滚动条和边框大小(不包括外边框)。

offsetHeight:

元素在垂直方向上占用的空间大小,以像素计。包括元素的高度,水平滚动条的高度,上下边框的高度

offsetWidth:

元素在上水平方向上占用的空间大小,以像素计。包括元素的宽度,水平滚动条的宽度,上下边框的宽度

offsetLeft:

元素的左外边框至包含元素的左内边框之间的像素距离。

offsetTop:

元素的上外边框至包含元素的上内边框之间的像素距离。
偏移量

2.offsetParent

这个属性很关键
取到的值的几种可能性

2.1当元素本身为absolute或者relative,父级元素不包含定位时

ie7返回html
其他浏览器返回body

2.2当元素本身含有fixed

因为固定定位的元素相对于视口进行定位,此时没有定位父级,offsetParent的结果为null
ff 返回body
chrome 返回 null
 ie返回null

2.3当元素本身和父级元素都不包含定位时

ff 返回body
chrome 返回 body
 ie7以上及混杂模式都返回body
 ie7返回div ,为box1,为当前元素最近的父元素

2.4当元素本身不包含定位,父级元素包含定位时

所有浏览器返回离当前元素最近的父级元素。

2.5获取元素的左偏移量

要想知道某个元素在页面上的偏移量,将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,直至根元素。
function getElementLeft(ele) {
var actualLeft = ele.offsetLeft;//当前元素在左偏移量
var current = ele.offsetParent;//当前元素的父元素,即包含元素
while(current !== null) {
actualLeft += current.offsetLeft;//取得父元素的左偏移量
current = current.offsetParent;//取得父元素的父元素
}
return actualLeft;
}

 

2.6获取元素的上偏移量

function getElementTop(ele) {
var actualTop = ele.offsetTop;
var current = ele.offsetParent;
while(current !== null) {
actualTop += current.offsetTop;
current = current.offsetParent;
}
return actualTop;
}

对于简单的CSS布局的页面,这2函数可以得到非常精确的结果,
对于使用表格和内嵌框架中的页面,由于不同浏览器实现这些元素的方式不同,因此就不太准确了

由上面代码对比可知,重复访问偏移量属性需要耗费大量的性能,所以要尽量避免重复访问这些属性。如果需要重复访问,则把它们的值保存在变量中,以提高性能

3.客户区大小

客户区大小指的是元素内容及其内边距所占据的空间大小。
有clientWidth和clientHeight个属性
clientWidth属性等于元素内容区域宽度加上padding左右的宽度。
clientHeight属性等于元素内容区域高度加上padding上下的高度。
客户区大小

4.跨浏览器获取视口大小

function getViewPort() {
        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;
          }
        }
        return [pageWidth,pageHeight];  //getViewPort()[0]为pageWidth,getViewPort()[1]为pageHeight
      }

 

0

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。