这段日子看到scrollTop,忽然想起了这三个小兄弟,因而看了不少文章,但发现总结的各有优缺和对错,因而决定本身总结一下,仅当随笔。有错误的欢迎指正。spa
这些属性均是用于获取页面元素在网页中的位置或相对位置,这里又能够简单的分为两类用途:对象
1.获取页面固定元素的位置;2.获取鼠标点击位置事件
先从页面固定元素的位置提及,用法均是 element.属性名 :element
1.首先仍是来讲说offset家族吧(offsetWidth、offsetHeight、offsetLeft和offsetTop)文档
offsetWidth是指元素的宽度(包括元素的边框),或者说元素水平方向上占用的空间大小。it
offsetHeight是指元素的高度(包括元素的边框),或者说元素垂直方向上占用的空间大小。io
offsetLeft:元素左外边框到 上层元素或左侧元素 之间的距离cli
offsetTop:元素上外边框到 上层元素或左侧元素 之间的距离scroll
width和height很好理解,只需注意他是包含边框宽度的;总结
关键在于Left和Top极可能有坑会出现,其实目前发现写也就两种状况:
1.对于普通元素。就是距离其左侧最近的兄弟元素或父元素的距离
2.对于position:absolute 等脱离文档流的,就要看其left和top属性了
2.client家族 (clientWidth、clientHeight、clientLeft和clientTop)
了解了offset,其实client很简单。
clientWidth和clientHeight是不含边框厚度的宽高
clientLeft和ClientTop则能获取到边框的厚度
3.scroll家族(scrollTop、scrollLeft、scrollWidth和scrollHeight)
正如offset和client在document.body元素上没有什么实际意义很少说了,
scroll家族 主要用于document.body元素上, 用在页面元素上并无什么特殊体现
当页面出现上下或左右滑动条时,scroll的做用就体现出来了:
document.body.scrollWidth和document.body.scrollHeight就是页面可视区域的大小了,
document.body.scrollLeft和document.bodyscrollTop就是可视区离整个文档的左、顶侧的距离。
最后关于这三者的总结就是 :
要找某个元素的位置和大小:用elem.offset;
要找涉及到元素的边框厚度:用elem.client ;
要涉及到滚轮和可视区大小、距离,用:document.body.scroll ;
另外,对于事件对象e的几个获取鼠标位置的属性,是这样的(事件触发时传入并使用):
相对于屏幕左上角: e.screenX/screenY 相对于文档显示区左上角: e.clientX/clientY 相对于所在元素左上角的坐标:e.offsetX/offsetY