DOM關於高度寬度位置的獲取

2022-03-03 09:37:24 字數 4373 閱讀 7332

假設 obj 為某個 html 控制項。

obj.offsettop 指 obj 相對於版面或由 offsetparent 屬性指定的父座標的計算上側位置,整型,單位畫素。

obj.offsetleft 指 obj 相對於版面或由 offsetparent 屬性指定的父座標的計算左側位置,整型,單位畫素。

obj.offsetwidth 指 obj 控制項自身的絕對寬度,不包括因 overflow 而未顯示的部分,也就是其實際佔據的寬度,整型,單位畫素。

obj.offsetheight 指 obj 控制項自身的絕對高度,不包括因 overflow 而未顯示的部分,也就是其實際佔據的高度,整型,單位畫素。

我們對前面提到的 offsetparent 作個說明。

offsetparent 獲取定義物件 offsettop 和 offsetleft 屬性的容器物件的引用。offsettop 與 offsetparent 很複雜,不同瀏覽器有不同解釋,浮動一下解釋又不同了,所以我們一般只要理解通過二者可以獲得控制項在瀏覽器中的絕對位置即可。

以上屬性在 firefox 中也有效。

另外:我們這裡所說的是指 html 控制項的屬性值,並不是 document.body,document.body 的值在不同瀏覽器中有不同解釋(實際上大多數環境是由於對 document.body 解釋不同造成的,並不是由於對 offset 解釋不同造成的)

我們知道 offsettop 可以獲得 html 元素距離上方或外層元素的位置,style.top 也是可以的,二者的區別是:

一、offsettop 返回的是數字,而 style.top 返回的是字串,除了數字外還帶有單位:px。

二、offsettop 唯讀,而 style.top 可讀寫。

三、如果沒有給 html 元素指定過 top 樣式,則 style.top 返回的是空字串。

offsetleft 與 style.left、offsetwidth 與 style.width、offsetheight 與 style.height 也是同樣道理。

clientheight

大家對 clientheight 都沒有什麼異議,都認為是內容可視區域的高度,也就是說頁面瀏覽器中可以看到內容的這個區域的高度,一般是最後乙個工具條以下到狀態列以上的這個區域,與頁面內容無關。

offsetheight

ie、opera 認為 offsetheight = clientheight + 滾動條 + 邊框。

ns、ff 認為 offsetheight 是網頁內容實際高度,可以小於 clientheight。

scrollheight

ie、opera 認為 scrollheight 是網頁內容實際高度,可以小於 clientheight。

ns、ff 認為 scrollheight 是網頁內容高度,不過最小值是 clientheight。

簡單地說

clientheight 就是透過瀏覽器看內容的這個區域高度。

ns、ff 認為 offsetheight 和 scrollheight 都是網頁內容高度,只不過當網頁內容高度小於等於 clientheight 時,scrollheight 的值是 clientheight,而 offsetheight 可以小於 clientheight。

ie、opera 認為 offsetheight 是可視區域 clientheight 滾動條加邊框。scrollheight 則是網頁內容實際高度。

同理

clientwidth、offsetwidth 和 scrollwidth 的解釋與上面相同,只是把高度換成寬度即可。

說明

以上基於 dtd html 4.01 transitional,如果是 dtd xhtml 1.0 transitional 則意義又會不同,在 xhtml 中這三個值都是同乙個值,都表示內容的實際高度。新版本的瀏覽器大多支援根據頁面指定的 doctype 來啟用不同的直譯器

scrolltop 是「卷」起來的高度值,示例:

如果為 p 設定了 scrolltop,這些內容可能不會完全顯示。

由於為外層元素 p 設定了 scrolltop,所以內層元素會向上捲,這捲起來的部分就是 scrolltop。

scrollleft 也是類似道理。

我們已經知道 offsetheight 是自身元素的寬度,而 scrollheight 是內部元素的絕對寬度,包含內部元素的隱藏的部分。上述中 p 的 scrollheight 為 300,而 p 的 offsetheight 為 100。

scrollwidth 也是類似道理。

ie 和 firefox 全面支援,而 netscape 8 和 opera 7.6 不支援 scrolltop、scrollleft(document.body.scrolltop、document.body.scrollleft 除外)。

1.clientheight, clientwidth: 

這兩個屬性大體上顯示了元素內容的象素高度和寬度.理論上說這些測量不考慮任何通過樣式表加入 

元素中的頁邊距,邊框等.

2.clientleft,clienttop: 

這兩個返回的是元素周圍邊框的厚度,如果不指定乙個邊框或者不定位改元素,他的值就是0.

3.scrollleft,scrolltop: 

如果元素是可以滾動的,可以通過這倆個屬性得到元素在水平和垂直方向上滾動了多遠,單位是象素. 

對於不可以滾動的元素,這些值總是0.

4.scrollheight,scrollwidth: 

不管有多少物件在頁面上可見,他們得到的是整體.

5.style.left: 

定位元素與包含它的矩形左邊界的偏移量

6.style.pixelleft: 

返回定位元素左邊界偏移量的整數畫素值.因為屬性的非畫素值返回的是包含單位的字串,例如,30px. 利用這個屬性可以單獨處理以畫素為單位的數值.

7.style:posletf: 

返回定位元素左邊界偏移量的數量值,不管相應的樣式表元素指定什麼單位.因為屬性的非位置值返回的是包含單位的字串,例如,1.2em   

top,pixeltop,postop這幾個模擬就行了.

left:   為從左向右移的位置,即掛件距離螢幕左邊緣的距離; 

clientleft   返回物件的offsetleft屬性值和到當前視窗左邊的真實值之間的距離 

offsetleft   返回物件相對於父級物件的布局或座標的left值,就是以父級物件左上角為座標原點,向右和向下為x、y軸正方向的x座標 

pixelleft   設定或返回物件相對於視窗左邊的位置

scrollwidth 是物件的實際內容的寬,不包邊線寬度,會隨物件中內容的多少改變(內容多了可能會改變物件的實際寬度)。

clientwidth 是物件可見的寬度,不包滾動條等邊線,會隨視窗的顯示大小改變。

offsetwidth 是物件的可見寬度,包滾動條等邊線,會隨視窗的顯示大小改變。

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

(需要提一下:css中的margin屬性,與clientwidth、offsetwidth、clientheight、offsetheight均無關)

offsetwidth:是元素相對父元素的偏移寬度。等於border+padding+width

clientwidth:是元素的可見寬度。等於padding+width

scrollwidth:是元素的寬度且包括滾動部分。

offsetleft:html元素相對於自己的offsetparent元素的位置 

scrollleft:返回和設定當前橫向滾動務的座標值

儲存為網頁,執行一下,點按鈕,滾動條移動 

點選div,先彈出b相對於a的位置,再彈出a相對於視窗的位置

獲取高度寬度

獲取瀏覽器顯示區域 可視區域 的高度 window height 獲取瀏覽器顯示區域 可視區域 的寬度 window width 獲取頁面的文件高度 document height 獲取頁面的文件寬度 document width 瀏覽器當前視窗文件body的高度 document.body hei...

js獲取頁面高度寬度

關於獲取各種瀏覽器可見視窗大小的一點點研究。在我本地測試當中 在ie firefox opera下都可以使用 document.body.clientwidth document.body.clientheight即可獲得,很簡單,很方便。而在公司專案當中 opera仍然使用 document.bo...

獲取螢幕寬度和高度

在android上的瀏覽器有個設定遠近的功能,導致獲取到的螢幕寬度和高度是會根據設定遠近而變化的。但是有個屬性不論如何設定都是不變的。就是螢幕的寬度和高度。var screenw window.outerwidth var screenh window.outerheight msg text wi...