当前位置: 首页 > 科技观察

js中不同height和top的对比_3

时间:2023-03-21 17:47:25 科技观察

每次看到js中的clientHeight(clientTop),offsetHeight(offsetTop),scrollHeight(scrollTop),我的头都大了,分不清这几种类型在全部。这些不值得一次或两次,然后在决定使用哪个之前每次都必须查看差异。今天我花了一点时间来理清它们之间的区别。本文主要基于chrome。浏览器之间可能还是有些区别的,但是很多都没有真正遇到过,也不是很清楚。我稍后会见他们。我也遇到过类似的兼容性问题,这里再记录一下。这次把chrome浏览器中各种属性的区别做一个记录,方便以后查看。clientHeight、offsetHeight、scrollHeight的区别  clientHeight在各个浏览器中基本是一样的,约定为内容可见区域的高度,也就是说,在页面浏览器中可以看到内容的区域的高度,不包括滚动条,不包括margin,但是包括padding,也就是说实际的clientHeight=对象当前可见区域的高度+padding值,如下图所示clientHeight=对象可见区域的高度(300)+上下padding值(20)=320文档元素.clientWidth||document.body.clientWidth;varh=document.documentElement.clientHeight||文档.body.clientHeight;  offsetHeight=当前对象的高度+滚动条+borde值+padding值,上图中当前对象的高度与可视区域的高度相同,所以offsetHeight=300+padding(20px)+边框(10px)=330  scrollHeight是网页内容的实际高度,最小值是clientHeight,也就是说可以等于clientHeight,但是我们假设这样一种情况,如下代码所示,父div的高度为300px,而子div的高度为500px,此时会形成一个滚动条。此时父div的结构图如下:    父div的scrollHeight应该是scrollHeight=500px+paddingvalue  因为此时会生成一个滚动条,可见区域的此时父div的高度为283,当前对象的高度为父div的高度为300,所以clientHeight=283px+paddingvalue(20px)=303pxoffsetHeight=父div的高度(300px)+填充值(20px)+边框(10px)=330px

clientTop、offsetTop、scrollTop的区别  clientTop可以参考clientHeight来理解,clientHeight的计算方式是当前可见的高度area加上padding值,那么clientTop可以理解为当前可见区域到上层元素的距离如上图,clientTop为5px,大多数情况下,clientTop为边框值。  offsetTop是当前对象到body元素的距离。它的计算方法比较复杂。先从上图来理解。当前对象指的是borderframe内的区域,所以offsetTop的计算要从当前对象的margin开始。计算公式如下offsetTop=当前对象的margin-top+当前对象所有上级元素的margin-top+当前对象所有上级元素的border-top。需要注意的是,offsetTop不能直接赋值,只能通过这种计算方式获取  scrollTop是当前窗口显示范围内,当前对象顶部到当前对象上边缘的距离.即,在垂直滚动条的情况下,滚动条被拉动的距离。