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 相关文章推荐
textContent在Firefox下与innerText等效的属性
May 12 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
Jan 09 Javascript
移动适配的几种方案(三种方案)
Nov 25 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
vue中v-model动态生成的实例详解
Oct 27 Javascript
Js中将Long转换成日期格式的实现方法
Jun 05 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
微信小程序实现留言功能
Oct 31 Javascript
Koa 中的错误处理解析
Apr 09 Javascript
js实现幻灯片轮播图
Aug 14 Javascript
Vue如何清空对象
Mar 03 Vue.js
使用Ajax实现无刷新上传文件
Apr 12 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
PHP的中问验证码
2006/11/25 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
linux下安装easy_install的方法
2013/02/10 Python
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python中的pack和unpack的使用
2018/03/12 Python
python实现最长公共子序列
2018/05/22 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
大学生毕业鉴定
2014/01/31 职场文书
公司合作意向书范文
2014/07/30 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
内乡县衙导游词
2015/02/05 职场文书