js中不同的height, top的区别对比


Posted in Javascript onSeptember 24, 2015

每次看到js中的 clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就头大,根本分不清这几种的区别,然而碰到这些已经不 值一两次了,然后每次都要查看一下各自的区别,才能决定使用哪个。

本篇主要以chrome为准,可能各个浏览器之间还是有一些区别,但很多自己还未真正遇到过,还不是很清楚,等以后碰到了类似的兼容性问题,再记录到这里,这次就chrome浏览器中各个属性的区别做个记录,以方便以后的查看

一 clientHeight,offsetHeight,scrollHeight的区别

clientHeight在各个浏览器中基本是一样的,一致认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,不包括滚动条,不包括margin,但包括padding,也就是说实际的clientHeight = 当前对象可视区域的高度 + padding值,如下图所示 clientHeight = 对象可视区域高度(300) + 上下padding值(20) = 320

js中不同的height, top的区别对比

在不同浏览器都实用的javascript方案:

var w= document.documentElement.clientWidth || document.body.clientWidth;
var h= document.documentElement.clientHeight || document.body.clientHeight;

offsetHeight = 当前对象的高度 + 滚动条 + borde值 + padding值,上图中当前对象的高度和可视区域高度是一样的,所以offsetHeight = 300 + padding(20px ) + border(10px)  = 330

        scrollHeight是网页内容的实际高度,最小值就是clientHeight,也就是说可以是跟clientHeight相等的,但我们假设这样一个情形,如下代码所示,父div高度是300px,子div高度是500px,这时候就会形成滚动条,此时父div的结构图如下:

js中不同的height, top的区别对比

父div的的scrollHeight 就应该是scrollHeight = 500px + padding值

因为此时产生了滚动条,此时父div的可视区域高度为283,当前对象高度也就是父div的高度为300,因此

clientHeight = 283px + padding值(20px) = 303px

offsetHeight = 父div的高度(300px) + padding值(20px) + 边框(10px) = 330px

<div id="parent" style="padding:10px;border:5px red solid;height:300px;width:200px;overflow:auto">
  <div style="height:500px;width:400px"></div>
</div>

二 clientTop,offsetTop,scrollTop的区别

clientTop的理解可以参考clientHeight,clientHeight的的计算方式是当前可视区域的高度 加上 padding值,那么clientTop就可以理解为当前可视区域到上一级元素的距离。

 如上图所示,clientTop就是5px,大部分情况下,clientTop都是这个border值。

offsetTop是当前对象到body元素的距离,它的计算方式相对复杂,先从上图进行理解,当前对象指的是border边框之内的区域,所以计算offsetTop要从当前对象的margin开始,计算公式如下 offsetTop = 当前对象的margin-top + 当前对象所有上级元素的margin-top + 当前对象所有上级元素的border-top,需要注意的是offsetTop是不能进行直接赋值的,只能通过这样的计算方式得到。

scrollTop是当前对象的最顶部到当前对象在当前窗口显示的范围内的顶边的距离.即是在出现了纵向滚动条的情况下,滚动条拉动的距离。

以上就是js中不同的height、 top的区别对比,希望对大家的学习有所帮助。

Javascript 相关文章推荐
javascript instanceof 与typeof使用说明
Jan 11 Javascript
基于Jquery的跨域传输数据(JSONP)
Mar 10 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
Mar 22 Javascript
javascript创建含数字字母的随机字符串方法总结
Aug 01 Javascript
微信小程序三级联动地址选择器的实例代码
Jul 12 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
微信小程序实现之手势锁功能实例代码
Jul 19 Javascript
微信小程序实现左右列表联动
May 19 Javascript
layui树形菜单动态遍历的例子
Sep 23 Javascript
Vue实现简单的跑马灯
May 25 Javascript
javascript实现移动端轮播图
Dec 09 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 #Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
Sep 24 #Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 #Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 #Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 #Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 #Javascript
直接拿来用的15个jQuery代码片段
Sep 23 #Javascript
You might like
咖啡语言
2021/03/03 咖啡文化
php单一接口的实现方法
2015/06/20 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
详解node.js的http模块实例演示
2018/07/12 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python re模块的高级用法详解
2018/06/06 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Python实现最大子序和的方法示例
2019/07/05 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
学雷锋的心得体会
2014/09/04 职场文书
合作经营协议书范本
2014/09/16 职场文书
捐助倡议书
2015/01/19 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript