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 相关文章推荐
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
Dec 17 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
Mar 25 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
解决iView中时间控件选择的时间总是少一天的问题
Mar 15 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
npm ci命令的基本使用方法
Sep 20 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
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
Python计算回文数的方法
2015/03/11 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python实现电子词典
2020/03/03 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
初中高效课堂实施方案
2014/02/26 职场文书
关于保护环境的标语
2014/06/09 职场文书
治安消防安全责任书
2014/07/23 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
学校端午节活动方案
2014/08/23 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python