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 相关文章推荐
JScript分割字符串示例代码
Sep 04 Javascript
javascript调试过程中找不到哪里出错的可能原因
Dec 16 Javascript
浅谈JavaScript函数节流
Dec 09 Javascript
js实现进度条的方法
Feb 13 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
Jun 05 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 Javascript
Element Carousel 走马灯的具体实现
Jul 26 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 session会话的安全性分析
2011/09/08 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
js window.onload 加载多个函数的方法
2009/11/02 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python多线程使用方法实例详解
2019/12/30 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
求职信的要素有哪些呢
2013/12/26 职场文书
大学生关于奋斗的演讲稿
2014/01/09 职场文书
厨房管理计划书
2014/04/27 职场文书
团干部培训方案
2014/06/03 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
城南旧事观后感
2015/06/11 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
图解上海144收音机
2021/04/22 无线电
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
redis cluster支持pipeline的实现思路
2021/06/23 Redis