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 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
javascript window.opener的用法分析
Apr 07 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
Sep 05 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
Jan 12 Javascript
详解node如何让一个端口同时支持https与http
Jul 04 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
Vue 中的compile操作方法
Feb 26 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
Dec 05 Javascript
JS函数节流和防抖之间的区分和实现详解
Jan 11 Javascript
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
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
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
对numpy中shape的深入理解
2018/06/15 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
敬老模范事迹
2014/05/21 职场文书
高中班长竞选稿
2015/11/20 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
5个实用的JavaScript新特性
2022/06/16 Javascript