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 相关文章推荐
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
Aug 29 Javascript
常用的jQuery前端技巧收集
Dec 24 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
react-native fetch的具体使用方法
Nov 01 Javascript
vue中添加mp3音频文件的方法
Mar 02 Javascript
了解ESlint和其相关操作小结
May 21 Javascript
使用javascript做在线算法编程
May 25 Javascript
jQuery轮播图实例详解
Aug 15 jQuery
原生JS封装vue Tab切换效果
Apr 28 Vue.js
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 使用GD库为页面增加水印示例代码
2014/03/24 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
使用python实现画AR模型时序图
2019/11/20 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
缴纳养老保险的证明
2014/01/10 职场文书
新护士岗前培训制度
2014/02/02 职场文书
物业总经理岗位职责
2014/02/28 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
初中毕业生自我评价
2015/03/02 职场文书
工作时间证明
2015/06/15 职场文书
一行Python命令实现批量加水印
2022/04/07 Python