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 相关文章推荐
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
May 14 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
Aug 04 Javascript
类似GMAIL的Ajax信息反馈显示
Feb 16 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
js判断某个字符出现的次数的简单实例
Jun 03 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 jQuery
JavaScript中concat复制数组方法浅析
Jan 20 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
jquery JSON的解析方式
2009/07/25 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Python实现登录接口的示例代码
2017/07/21 Python
python生成excel的实例代码
2017/11/08 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
WxPython建立批量录入框窗口
2019/02/27 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python dataframe NaN处理方式
2019/12/26 Python
PyTorch安装与基本使用详解
2020/08/31 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
程序员岗位职责
2013/11/11 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
员工保密承诺书
2014/05/28 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python