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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
Feb 08 Javascript
JavaScript获取XML数据附示例截图
Mar 05 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
Mar 19 Javascript
jquery实现兼容IE8的异步上传文件
Jun 15 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
小白谈谈对JS原型链的理解
May 03 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 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
session在PHP大型web应用中的使用
2011/06/25 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
详解php中反射的应用
2016/03/15 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
工作中个人的自我评价
2013/12/31 职场文书
英语自我评价范文
2014/01/24 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
小学生思想品德评语
2014/12/31 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏