企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 一、 client系列 * 1、`clientWidth`和`clientHeight` >表示可视区域的高度(其中只有`padding`包含在里面,其他的`border`、`margin`、滚动条都不包含) >存在垂直滚动条: >``` >contentWidth + padding - scollbarWidth >``` >不存在滚动条: >``` >contentWidth + padding >``` ![](https://img.kancloud.cn/95/e7/95e7ead9b192f75eda109f0dd7d52d83_411x247.png) * 2、`clientTop`和`clientLeft` >表示边框的宽度,指的是`border`,有滚动条就包含滚动条 ``` scrollbarWidth = (content width + paddingLeftWidth + paddingRightWidth) - clientWidth ``` ![](https://img.kancloud.cn/0e/28/0e280f6d9bb14670e1d6150269f9a3c4_629x420.png) `client`相关代码 ``` Document div { width: 300px; height: 200px; border: 10pxsolidrebeccapurple; background-color: royalblue; padding: 20px; margin: 100px;     }     fjaskdfl;jasdffaklsdhdklashfklsda     hfaskdhfksldafhksadjfhskadfjads     hfsakjfaslfjsdakfhasfjkhsdjfhsakfl     jahsalfadsfhjladsfhasdkfjhdsafa vardoms\= document.getElementsByTagName('div')\[0\] console.log(doms.clientWidth) // clientWidth:表示padding加自己的content长度(不包含scroll的长度) console.log(doms.clientHeight) //指的就是border console.log(doms.clientLeft)  console.log(doms.clientTop) ``` ### 二、 offset系列 * 1、`offsetWidth`和`offsetHeight` >包括padding、border、水平滚动条,但不包括margin的元素的高度 ![](https://img.kancloud.cn/4a/bb/4abb72dedd442d3f9d05dd1056ae12aa_411x247.png) * 2、`offsetTop`和`offsetLeft` >表示当前元素距离最近父元素边框的距离,和有没有滚动条没有关系 情况一:当父元素都没有设置position时: (1)、在Chrome,opera和IE浏览器中offsetLeft是元素边框外侧到浏览器窗口内侧的距离且body.offsetLeft=0 ![](https://img.kancloud.cn/b4/9e/b49e7a418038b33bad88ce00f94776c7_561x307.png) (2)、在firefox浏览器中offsetLeft是元素边框外侧到body内侧的距离body.offsetLeft=-边框宽度 ![](https://img.kancloud.cn/44/77/44779a281000bcdafcfa3fef7a54478a_553x298.png) 情况二:如果父元素是body且body设置了position属性: (1)、在Chrome和opera浏览器中offsetLeft是元素边框外侧到body边框外侧的距离 ![](https://img.kancloud.cn/5a/6e/5a6e82fd5d7132817836678080aa984d_533x294.png) (2)、在IE和fireForx浏览器中offsetLeft是元素边框外侧到body边框内侧的距离 ![](https://img.kancloud.cn/ae/23/ae230242fd627c4be038c0859e72bd61_541x289.png) 情况三:如果父元素不是body元素且设置了position属性时: offsetLeft为元素边框外侧到父元素边框内侧的距离(各浏览器情况一致) ![](https://img.kancloud.cn/fe/e2/fee264f75f322e7400fa46025af82028_517x286.png) * 3、`offsetParent` >offsetParent定义:那么offsetParent就是距离该子元素最近的进行过定位的父元素(position:absolute  relative fixed),如果其父元素中不存在定位则offsetParent为:body元素 根据定义分别存在以下几种情况 * 【1】元素自身有fixed定位,父元素不存在定位,则offsetParent的结果为null(firefox中为:body,其他浏览器返回为null) * 【2】元素自身无fixed定位,且父元素也不存在定位,offsetParent为元素 * 【3】元素自身无fixed定位,且父元素存在定位,offsetParent为离自身最近且经过定位的父元素 * 【4】元素的offsetParent是null `offset`相关代码: ``` Document body { position: relative; padding: 0; margin: 10px; border: 10pxsolidblueviolet;     } div { width: 300px; height: 200px; border: 10pxsolidrebeccapurple; padding: 20px; margin: 100px;     }     fjaskdfl;jasdffaklsdhdklashfkl     hfaskdhfksldafhksadjfhskadfjads     hfsakjfaslfjsdakfhasfjkhsdjfhs     jahsalfadsfhjladsfhasdkfjhdsafa     hasdfhjshaoyouqingjiangxinongye     shaoyouqingjiangxinongyedaxuen     zuiniubiderenwu,ninzhidaomabaob vardoms\= document.getElementsByTagName('div')\[0\] console.log(doms.offsetWidth) // offsetWidth:表示padding加自己的content长度还有border的宽度 console.log(doms.offsetHeight) //offsetTop相对的是父级带position部分的偏移量 console.log(doms.offsetTop)  console.log(doms.offsetLeft) // offsetParent:自己的父节点 console.log(doms.offsetParent) ``` ### 三、 scroll系列 * scrollWidth>clientWidth形成横线滚轮![](https://img.kancloud.cn/04/e0/04e0cbce305e8ce0ed1c77b7669b28af_616x361.png) * scrollHeight>clientHeight形成纵线滚轮![] ![](https://img.kancloud.cn/23/e3/23e3df3aeb84b3a49ce3fbeac468759c_800x355.png) * 1、`scrollWidth`和`scrollHeight` >表示可滚动区域的宽高 * 2、`scrollTop`和`scrollLeft` >表示在滚动区域滚动的距离 * 3、`scrollTo(xnum, ynum)`和`scrollBy(xnum, ynum)` `scrollTo`的参照物相对的是(0, 0),但是scrollBy相对的是自身的位置进行偏移 >表示滚动到指定的x和y的距离 `scroll`系列代码: Document body { padding: 0; margin: 0;     } div { width: 300px; height: 200px; border: 10pxsolidrebeccapurple; padding: 20px; margin: 100px; overflow: scroll;     }     fjaskdfl;jasdffaklsdhdklashfklssssssssssssssss     hfaskdhfksldafhksadjfhskadfjadsssssssss     hfsakjfaslfjsdakfhasfjkhsdjfhsfdasssssssssss     jahsalfadsfhjladsfhasdkfjhdsafaasdfffffff     hasdfhjshaoyouqingjiangxinongyefffffffffffffffffff     shaoyouqingjiangxinongyedaxuenssssssssssssssss     zuiniubiderenwu,ninzhidaomabaobssssssssssssssssss     fjaskdfl;jasdffaklsdhdklashfklssssssssssssssssssssssss     hfaskdhfksldafhksadjfhskadfjadsssssssss     jahsalfadsfhjladsfhasdkfjhdsafassssssssssssssssssssss     hasdfhjshaoyouqingjiangxinongyesssssssssssdss     shaoyouqingjiangxinongyedaxuen     zuiniubiderenwu,ninzhidaomabaob vardoms\= document.getElementsByTagName('div')\[0\] console.log(doms.scrollWidth) // scrollWidth:表示整个可以滚动的区域的宽度 console.log(doms.scrollHeight) doms.onscroll = function() { // scrollLeft:表示的是相对于本次滚动的原点的偏移量 console.log(doms.scrollLeft)  console.log(doms.scrollTop)     } doms.scrollTo(10, 10) // scrollTo:表示滚动到指定的px位置 setTimeout(function() { // scrollBy:表示的相对自身再滚动的距离 doms.scrollBy(10,10)     }, 1000)