client offset scroll 之間的區別

一、client

屬性
clientWidth 元素被設置的寬度 + padding左右內間距
clientHeight 元素被設置的高度 + padding上下內間距
clientLeft 左 邊框的寬度
clientTop 上 邊框的寬度

 

二、offset

屬性
offsetWidth 元素被設置的寬度 + padding左右內間距 + 左右邊框的值
offsetHeight 元素被設置的高度 + padding上下內間距 + 上下邊框的值
offsetLeft 元素外邊距離父級左內邊距
offsetTop 元素外邊距離父級上內邊距
offsetParent 返回這個元素的父級元素

 

註:1)offsetLeft/offsetTop:參照由父級身上的 position:absolute/fixed,如果父級元素身上沒有就逐層向上查找,直到 body;

2)offset 必須和 position 配合使用,往往這個值還必須是 absolute;

3)offset往往和我們做元素的運動有關;

 

三、scroll

屬性
scrollWidth/scrollHeight 就是我們設置的寬和高加內邊距(內容沒有溢出的前提,如果超出了範圍就按內容而定)
scrollLeft/scrollTop 滾動條捲走的高度

 

四、總結

1)client系列不獲取邊框數值,offset會獲取邊框的數值;

2)以上兩者獲取到的數值都受元素被設置的寬高具體數值影響,如果在出現滾動條的情況下想獲取元素內所有內容的實際高度,則使用scrollHeight;

3)獲取瀏覽器的body的屬性是有兼容的

var  dd=document . body || document . documentElement;

  獲取body的整個文檔的高

document . scrollHeight || document . documentElement . scrollHeight;

  獲取屏幕的高(瀏覽器的可視區)

document . body || document . documentElement . clientHeight