芒果团子的博客

js获取位置、宽高方法

字数统计: 462阅读时长: 1 min
2018/10/19 Share

偏移量(只读)

  • offsetHeight 垂直方向上占用的空间大小

元素高度 + 水平滚动条高度(可见的) + 上边框高 + 下边框高 = offsetHeight

  • offsetWidth 水平方向上占用的空间大小

元素宽度 + 垂直滚动条宽度(可见的)+ 左边框宽度 + 右边框宽度 = offsetWidth

  • offsetTop

包含元素的上外边框 <————> 元素的上外边框

  • offsetLeft

包含元素的左外边框 <————> 元素的左外边框

  • offsetParent

元素的相对父节点,此时元素相对于谁定位,其就是元素的offsetParent,parentNode就是元素的父节点,两者不一定相等。

客户区大小(只读)

  • clientHeight

元素内容高 + 上下内边距 = clientHeight

  • clientWidth

元素内容宽 + 左右内边距 = clientWidth

PS:偏移量与客户区属性都是只读,每次访问需重新计算,尽量避免重复访问这些属性,可将其保存在局部变量中提高性能。

滚动大小

  • scrollHeight

没有滚动条的情况下,元素内容的总高度。

  • scrollWidth

没有滚动条的情况下,元素内容的总宽度。

  • scrollTop

隐藏在内容区域上方的像素

  • scrollLeft

隐藏在内容区域左侧的像素

确定文档的总高度,需要取得scroll/client两者中的最大值,保证在跨浏览器的环境下得到精确结果。

1
2
3
4
5
6
7
var docHeight = Math.max(document.documentElement.scrollHeight,
document.documentElement.clientHeight);
var docWidth = Math.max(document.documentElement.scrollWidth,
document.documentElement.clientWidth);

// IE下,需要用document.body代替document.documentElement
// documentElement 是整个节点树的根节点root,即<html> 标签

元素大小

使用方法getBoundingClientRect(),返回一个矩形对象。

1
2
3
4
5
var dom = document.getElementById('test');
var obj = dom.getBoundingClientRect();
// obj的格式
{bottom: xx, height: xx, left: xx, right: xx, top: xx, width: xx,x: xx, y: xx}
// top、left、right、bottom说明元素在页面中相对于视口的位置

CATALOG
  1. 1. 偏移量(只读)
  2. 2. 客户区大小(只读)
  3. 3. 滚动大小
  4. 4. 元素大小