浅析js中不同的height, top对比
来源:互联网 发布:sql注入攻击工具 编辑:程序博客网 时间:2024/05/21 09:21
每次看到js中的 clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就头大,根本分不清这几种的区别,然而碰到这些已经不 值一两次了,然后每次都要查看一下各自的区别,才能决定使用哪个。
今天特地花了一点时间整理了下各自的区别,本篇主要以chrome为准,可能各个浏览器之间还是有一些区别,但很多自己还未真正遇到过,还不是很清楚,等以后碰到了类似的兼容性问题,再记录到这里,这次就chrome浏览器中各个属性的区别做个记录,以方便以后的查看
一 clientHeight,offsetHeight,scrollHeight的区别
clientHeight在各个浏览器中基本是一样的,一致认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,不包括滚动条,不包括margin,但包括padding,也就是说实际的clientHeight = 当前对象可视区域的高度 + padding值,如下图所示 clientHeight = 对象可视区域高度(300) + 上下padding值(20) = 320
在不同浏览器都实用的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的结构图如下:
父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是当前对象的最顶部到当前对象在当前窗口显示的范围内的顶边的距离.即是在出现了纵向滚动条的情况下,滚动条拉动的距离.
今天特地花了一点时间整理了下各自的区别,本篇主要以chrome为准,可能各个浏览器之间还是有一些区别,但很多自己还未真正遇到过,还不是很清楚,等以后碰到了类似的兼容性问题,再记录到这里,这次就chrome浏览器中各个属性的区别做个记录,以方便以后的查看
一 clientHeight,offsetHeight,scrollHeight的区别
clientHeight在各个浏览器中基本是一样的,一致认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,不包括滚动条,不包括margin,但包括padding,也就是说实际的clientHeight = 当前对象可视区域的高度 + padding值,如下图所示 clientHeight = 对象可视区域高度(300) + 上下padding值(20) = 320
在不同浏览器都实用的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的结构图如下:
父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是当前对象的最顶部到当前对象在当前窗口显示的范围内的顶边的距离.即是在出现了纵向滚动条的情况下,滚动条拉动的距离.
0 0
- 浅析js中不同的height, top对比
- 用js取得DIV的top,left,width,height值
- javascript中各种width,height,left,top的总结
- li的height 和 line-height 对比
- 关于line-height height的对比
- js中top的作用
- position之absolute中left、bottom、top、right与width、height的关系
- Jquery(JS)中.height()和.innerHeight(),outerHeight()的差别
- Sqlserver中取每次不同的Top行
- line-height不同单位之间的区别
- 关于控件的Left 、Top、Width和Height属性
- js中join()与 split()的对比
- JS中map 与 forEach 的对比
- 网页中同字号字体的不同单位对比列表
- 两个div块中的文字所占用的高度在不同浏览器中不一致,此时应设置两个div块中height和line-height
- js 中style.height和offsetHeight比较
- js 中style.height和offsetHeight比较
- js中height、clientHeight、scrollHeight、offsetHeight区别
- 介绍Python 和 Scikit-Learn 的机器学习
- 文件输入输出编程
- 文章列表
- 寒门再难出贵子(很现实,很残酷,慎入)
- 英语能力的提升:
- 浅析js中不同的height, top对比
- java的.jar包在eclipse下的源码关联
- VS2013+Win8.1+CUDA7.0环境配置
- POJ 1789 Truck History (prime_裸题)
- Map集合的基本概述
- 科研不是比赛,而是一种对未知和完美的自我追求——跟邢波(Eric Xing)面对面聊科研
- linux( 二)
- ORACLE database console无法登陆
- 马云对话香港青年:超过我只需十到十五年