clientHeight、offsetHeight、scrollHeight详解

 

 

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth   (包括边线的宽);
网页可见区域高: document.body.offsetHeight  (包括边线的高);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;

 

1、offsetWidth width+padding+border

当前对象的宽度。

style.width也是当前对象的宽度(width+padding+border)。

区别:1)style.width返回值除了数字外还带有单位px;

           2)如对象的宽度设定值为百分比宽度,则无论页面变大还是变小,

              style.width都返回此百分比,而offsetWidth则返回在不同页面中对象的宽度值而不是百分比值;

           3)如果没有给 HTML 元素指定过 width样式,则 style.width 返回的是空字符串;

 

2、offsetHeight :(Height+padding+border)

当前对象的高度。

style.height也是当前对象的高度(height+padding+border)。

区别:1)style.height返回值除了数字外还带有单位px;

           2)如对象的高度设定值为百分比高度,则无论页面变高还是变矮,

              style.height都返回此百分比,而offsetHeight则返回在不同页面中对象的高度值而不是百分比值;

           3)如果没有给 HTML 元素指定过 height样式,则 style.height返回的是空字符串;

 

3、offsetLeft :

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

不能对其进行赋值.设置对象到其上级层左边的距离请用style.left属性。

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

区别:1)style.left返回值除了数字外还带有单位px;

           2)如对象到其上级层左边的距离设定值为百分比,

              style.left返回此百分比,而offsetLeft则返回到其上级层左边的距离的值;

           3)如果没有给 HTML 元素指定过 left样式,则 style.left返回的是空字符串;

 

4、offsetTop :

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

不能对其进行赋值.设置对象到上级层顶部边的距离请用style.top属性。

style.top当前对象到其上级层顶部边的距离。

区别:1)style.top返回值除了数字外还带有单位px;

           2)如对象到其上级层顶部边的距离设定值为百分比,

              style.top返回此百分比,而offsetTop则返回到其上级顶部边的距离的值;

           3)如果没有给 HTML 元素指定过 top样式,则 style.top返回的是空字符串;

注意:如果上级层为body,由于IE、FF对padding、margin的解释不一样所以要明确规定处理不是下列的区别就不成立了。

IE   1)如果Div的上级层是body,而div与body之间有个div,如body->div->divo;divo的offsetTop=div的padding+margin+boder;

       2)如果Div的上级层是body,如body>divo;divo的offsetTop=div的padding+margin+boder;

             这divo的offsetTop=divo的margin >body.padding则为divo的margin,否则为body.padding谁大是谁?

FF  上述两种情况:offsetTop=margin+padding ;

(IE与FF中的body默认padding为10)在IE6.0 FF3.6.13

 

5、scrollWidth:获取元素内容宽度的度量,包括由于溢出导致的视图中不可见内容。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollWidth

 

6、scrollHeight: 获取元素内容高度的度量,包括由于溢出导致的视图中不可见内容。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollHeight

 

7、scrollLeft:设置或获取位于对象左边界和对象中目前可见内容的最左端之间的距离(width+padding为一体)

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollLeft

 

8、scrollTop:设置或获取位于对象最顶端和对象中可见内容的最顶端之间的距离;(height+padding为一体)

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop

 

9、clientWidth: 表示元素的内部宽度,以像素计。该属性包括内边距,但不包括垂直滚动条(如果有)、边框和外边距。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientWidth

 

10、clientHeight: 获取元素内部的高度(单位像素),该属性包含内边距,但不包括水平滚动条、边框和外边距。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientHeight

 

11、clientLeft: 表示一个元素的左边框的宽度,以像素表示。如果元素的文本方向是从右向左(RTL, right-to-left),并且由于内容溢出导致左边出现了一个垂直滚动条,则该属性包括滚动条的宽度。clientLeft 不包括左外边距和左内边距。clientLeft 是只读的。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientLeft

 

12、clientTop:一个元素顶部边框的宽度(以像素表示)。不包括顶部外边距或内边距。clientTop 是只读的。

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientTop

 

13、offsetParent :当前对象的上级层对象.

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

以上属性测试的文档类型为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

如果不写文档类型,浏览器就会按照 HTML 4.0 的方式来处理,则效果可能不同。

 

要获取当前页面的滚动条纵坐标位置,用:

document.documentElement.scrollTop;
而不是:
document.body.scrollTop;
documentElement 对应的是 html 标签,而 body 对应的是 body 标签。

在标准w3c下,document.body.scrollTop恒为0,需要用document.documentElement.scrollTop来代替;
如果你想定位鼠标相对于页面的绝对位置时,你会发现google里面1000篇文章里面有999.99篇会让你使用 event.clientX+document.body.scrollLeft,event.clientY+document.body.scrollTop, 如果你发现你的鼠标定位偏离了你的想象,请不要奇怪,这是再正常不过的事情。
ie5.5之后已经不支持document.body.scrollX对象了。
所以在编程的时候,请加上这样的判断
if (document.body && document.body.scrollTop && document.body.scrollLeft)
{
  top=document.body.scrollTop;
  left=document.body.scrollleft;    
}
if (document.documentElement && document.documentElement.scrollTop && document.documentElement.scrollLeft)
{
  top=document.documentElement.scrollTop;
  left=document.documentElement.scrollLeft;
}

 

posted on 2017-12-25 14:51  ranyonsue  阅读(1319)  评论(0编辑  收藏  举报

导航