A-A+

js中clientHeight、offsetHeight、scrollHeight、scrollTop详解

2016年01月28日 web前端设计 暂无评论 阅读 7 views 次

本文章来总结一下在js中clientHeight,offsetHeight,scrollHeight,scrollTop用法介绍有需要的朋友可参考参考。

clientHeight

大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。

offsetHeight

IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。 NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

  1. <style type="text/css" media="all">  
  2. body {font-size:14px;}  
  3. a,a:visited {color:#00f;}  
  4. #Div_CnLei {  
  5. width:300px;  
  6. height:200px;  
  7. padding:10px;  
  8. border:10px solid #ccc;  
  9. background:#eee;  
  10. font-size:12px;  
  11. }  
  12. #Div_CnLei p {margin:0;padding:10px;background:#fff;}  
  13. </style>  
  14. <script type="text/javascript">  
  15. function Obj(s){  
  16. return document.getElementById(s)?document.getElementById(s):s;  
  17. }  
  18. function GetClientWidth(o){  
  19. return Obj(o).clientWidth;  
  20. }  
  21. function GetClientHeight(o){  
  22. return Obj(o).clientHeight;  
  23. }  
  24. function GetOffsetWidth(o){  
  25. return Obj(o).offsetWidth;  
  26. }  
  27. function GetOffsetHeight(o){  
  28. return Obj(o).offsetHeight;  
  29. }  
  30. </script>  

假设 obj 为某个 HTML 控件。

obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。

obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。

obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。

obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

我们对前面提到的“上方或上层”与“左方或上层”控件作个说明。

例如,代码如下:

  1. <div id="tool">  
  2.    <input type="button" value="提交">  
  3.    <input type="button" value="重置">  
  4. </div>  

“提交”按钮的 offsetTop 指“提交”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。

“重置”按钮的 offsetTop 指“重置”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。

“提交”按钮的 offsetLeft 指“提交”按钮距“tool”层左边框的距离,因为距其左边最近的是 “tool” 层的左边框。

“重置”按钮的 offsetLeft 指“重置”按钮距“提交”按钮右边框的距离,因为距其左边最近的是“提交”按钮的右边框。

scrollHeight

IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。 NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。

简单地说

clientHeight 就是透过浏览器看内容的这个区域高度。

scrollTop

“卷”起来的高度值

1.offsetTop :

当前对象到其上级层顶部的距离.

不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性.

2.offsetLeft :

当前对象到其上级层左边的距离.

不能对其进行赋值.设置对象到页面左部的距离请用style.left属性.

3.offsetWidth :

当前对象的宽度.

与style.width属性的区别在于:如对象的宽度设定值为百分比宽度,则无论页面变大还是变小,style.width都返回此百分比,而offsetWidth则返回在不同页面中对象的宽度值而不是百分比值

4.offsetHeight :

与style.height属性的区别在于:如对象的宽度设定值为百分比高度,则无论页面变大还是变小,style.height都返回此百分比,而offsetHeight则返回在不同页面中对象的高度值而不是百分比值

5.offsetParent :

当前对象的上级层对象.

注意.如果对象是包括在一个DIV中时,此DIV不会被当做是此对象的上级层,(即对象的上级层会跳过DIV对象)上级层是Table时则不会有问题.

利用这个属性,可以得到当前对象在不同大小的页面中的绝对位置.

例,代码如下:

  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml">   
  3. <head>   
  4. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>   
  5. <title>RainMan</title>   
  6. <styletypestyletype="text/css">   
  7. #outer{position:absolute;}   
  8. </style>   
  9. <scripttypescripttype="text/javascript">   
  10. window.onload=function(){   
  11.   vartarget=document.getElementById('target');   
  12.   varouter=document.getElementById('outer');   
  13.   alert(target.offsetParent==outer);  //true   
  14. };   
  15. </script>   
  16. </head>   
  17. <body>   
  18. <dividdivid="outer"class="test">   
  19.   <dividdivid="inner">   
  20.     <dividdivid="target"class="test">Target<br/>rainman</div>   
  21.   </div>   
  22. </div>   
  23. </body>   
  24. </html>   
  25.      
  26. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  27. <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml">   
  28. <head>   
  29. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>   
  30. <title>RainMan</title>   
  31. <styletypestyletype="text/css">   
  32. </style>   
  33. <scripttypescripttype="text/javascript">   
  34. window.onload=function(){   
  35.   vartarget=document.getElementById('target');   
  36.   alert(target.offsetParent==document.body);  //true   
  37. };   
  38. </script>   
  39. </head>   
  40. <body>   
  41. <dividdivid="outer"class="test">   
  42.   <dividdivid="inner">   
  43.     <dividdivid="target"class="test">Target<br/>rainman</div>   
  44.   </div>   
  45. </div>   
  46. </body>   
  47. </html>  

6.scrollLeft :

对象的最左边到对象在当前窗口显示的范围内的左边的距离.

即是在出现了横向滚动条的情况下,滚动条拉动的距离,代码如下:

  1. <input type="button" value="点一下" onclick="move()">   
  2. <div id="d" style="background-color:#ff9966; position:absolute; left:170px; top:100px;width:300;height:300;overflow:scroll"   
  3. onclick="alert('offsetLeft:'+this.offsetLeft)">   
  4. <div style="height:600;width:600" onclick="alert('offsetLeft:'+this.offsetLeft)"></div>   
  5. </div>   
  6. <script language="javascript">   
  7. function move()   
  8. {   
  9. var d=document.getElementById("d")   
  10. a=eval(20)   
  11. d.scrollLeft+=a   
  12. }   
  13. </script>  

7.scrollTop

对象的最顶部到对象在当前窗口显示的范围内的顶边的距离.

即是在出现了纵向滚动条的情况下,滚动条拉动的距离.

clientX, clientY是鼠标当前相对于网页的位置,当鼠标位于页面左上角时clientX=0, clientY=0;

offsetX, offsetY是鼠标当前相对于网页中的某一区域的位置,当鼠标位于页面中这一区域的左上角时offsetX=0, offsetY=0;

screenX, screenY是相对于用户显示器的位置

x,y是鼠标当前相对于当前浏览器的位置,代码如下:

  1. function getAbsLeft(e){  
  2. var l=e.offsetLeft;  
  3. while(e=e.offsetParent) l+=e.offsetLeft;  
  4. return l;  
  5. }  
  6. var e = document.getElementById("liuxiaofan");  
  7. getAbsLeft(e);  

以上主要指IE之中,FireFox差异如下:

IE6.0、FF1.06+:

clientWidth = width + padding

clientHeight = height + padding

offsetWidth = width + padding + border

offsetHeight = height + padding + border

IE5.0/5.5:

clientWidth = width - border

clientHeight = height - border

offsetWidth = width

offsetHeight = height

标签:

给我留言