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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
js tab效果的实现代码
Dec 26 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
简单谈谈Javascript中类型的判断
Oct 19 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
vue利用axios来完成数据的交互
Mar 23 Javascript
基于React+Redux的SSR实现方法
Jul 03 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
Feb 06 Javascript
vue路由实现登录拦截
Mar 24 Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 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
第三节 定义一个类 [3]
2006/10/09 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
python操作CouchDB的方法
2014/10/08 Python
python套接字流重定向实例汇总
2016/03/03 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
餐饮营销方案
2014/02/23 职场文书
企业负责人任命书
2014/06/05 职场文书
英文感谢信格式
2015/01/21 职场文书
公司地址变更通知
2015/04/25 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang