由于前端经常会遇到计算位置的问题,那么搞懂clientWidth,offsetWidth,scrollHeight等等这些就变得尤为重要。放上经典图,一张图让你搞懂clientWidth,offsetWidth,scrollHeight~~~
除了这些还有clientX,pageX,screenX等等,再来看下下面的图
一、clientWidth、clientHight
—这两个属性可以获取元素的可见宽度和高度
—这些属性都不带px的,返回的是一个数字,可以直接用来计算
—会获取元素的宽度和高度,包括内容区跟内边距
—这些属性都是只读的,不可修改
二、offsetWidth、offsetHeight
—获取元素的整个宽度和高度,包括内容区,内边距和边框
三、offsetParent
—可以用来获取当前元素的定位父元素
—会获取到离当前元素最近的开启了定位的祖先元素,如果所有的元素都没有开启定位,则去找html,也就是包含块的概念
四、offsetLeft、offsetTop
offsetLeft
-当前元素相对于其定位父元素的水平偏移量
offsetTop
-当前元素相对于其定位父元素的垂直偏移量
五、scrollWidth、scrollHeight
-可以获取元素整个滚动区的宽度高度
scrollLeft -可以获取水平滚动条滚动的距离
scrollTop -可以获取垂直滚动条滚动的距离
六、innerHeight、innerWidth
(1)innerHeight属性:窗口中文档显示区域的高度,不包括菜单栏、工具栏等部分。该属性可读可写。
IE不支持该属性,IE中body元素的clientHeight属性与该属性相同。
(2)innerWidth属性:窗口中文档显示区域的宽度,同样不包括边框。该属性可读可写。
IE不支持该属性,IE中body元素的clientWidth属性与该属性相同。
七、总结:
- clientLeft,clientTop
表示内容区域的左上角相对于整个元素左上角的位置(包括边框)。(取决于边框的像数值?) - clientWidth,clientHeight
内容区域的宽高,不包括边框宽度值。 - clientX、clientY
点击位置距离当前body可视区域的x,y坐标 - offsetLeft,offsetTop
相对于最近的祖先定位元素。 - offsetParent
某元素的父元素 例如:this.offsetParent.tagName.toLowerCase() 得到body... - offsetWidth,offsetHeight
整个元素的尺寸(不包括因为滚动条变宽的宽度,包括滚动条的宽度和高度) - offsetX, offsetY
相对于带有定位的父盒子的x,y坐标 - scrollLeft,scrollTop
元素滚动的距离大小 - scrollWidth,scrollHeight
整个内容区域的宽度(包括需拉动滚动条隐藏起来的那些部分) scrollWidth = scrollTop+clientWidth - pageX、pageY
对于整个页面来说,包括了被卷去的body部分的长度 - screenX、screenY
点击位置距离当前电脑屏幕的x,y坐标 - x、y
和screenX、screenY一样