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 对Select的操作备忘记录
Jul 04 Javascript
jquery交替变换颜色的三种方法 实例代码
Nov 19 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
Aug 20 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
通过实例解析vuejs如何实现调试代码
Jul 16 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
又一个php 分页类实现代码
2009/12/03 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python列表计数及插入实例
2014/12/17 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
python爬虫的工作原理
2017/03/05 Python
Django验证码的生成与使用示例
2017/05/20 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python iter()函数用法实例分析
2018/03/17 Python
python实现名片管理器的示例代码
2019/12/17 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
2015年药店工作总结
2015/04/20 职场文书
论文致谢词范文
2015/05/14 职场文书
防震减灾主题班会
2015/08/14 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python