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 相关文章推荐
利用js跨页面保存变量做菜单的方法
Jan 17 Javascript
jquery下操作HTML控件的实现代码
Jan 12 Javascript
jquery网页元素拖拽插件效果及实现
Aug 05 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
图解Sublime Text3使用技巧
Dec 21 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
js实现异步循环实现代码
Feb 16 Javascript
vue使用xe-utils函数库的具体方法
Mar 06 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 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中curl_multi的应用
2013/07/17 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
再探JavaScript作用域
2014/09/24 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python中集合类型(set)学习小结
2015/01/28 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
超市5.1促销活动
2014/01/15 职场文书
初中学校军训方案
2014/05/09 职场文书
村容村貌整治方案
2014/05/21 职场文书
毕业大学生自荐信
2014/06/17 职场文书
擅自离岗检讨书
2014/09/12 职场文书
环卫个人总结
2015/03/03 职场文书
求职简历自我评价范文
2015/03/10 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL