首頁 web前端 js教程 淺析offsetLeft,Left,clientLeft的差異_基礎知識

淺析offsetLeft,Left,clientLeft的差異_基礎知識

May 16, 2016 pm 05:11 PM
left



假設 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
offsetWidorderth = widthpad ding bding bee> padding
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSScli中的margind 、offsetWidth、clientHeight、offsetHeight皆無關)

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

clientwidth:是元素的可見寬度。等於padding width
scrollwidth:是元素的寬度且包括滾動部分。
offsetLeft:Html元素相對於自己的offsetParent元素的位置
scrollLeft:返回和設置當前橫向滾動務的坐標值

複製代碼 程式碼如下:

onclick="alert('offsetLeft:' this.offsetLeft)"this.offsetLeft:' this.offsetLeft)"this.offsetLeft:' this.offsetLeft)"this.offsetLeft:' this.offsetLeft)"this.offsetLeft:' this.offsetLeft)" >




儲存為網頁,運行一下,點按鈕,滾動條移動
點擊div,先彈出b相對於a的位置,再彈出a相對於窗口的位置
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript:探索網絡語言的多功能性 JavaScript:探索網絡語言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

如何使用Next.js(前端集成)構建多租戶SaaS應用程序 如何使用Next.js(前端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

使用Next.js(後端集成)構建多租戶SaaS應用程序 使用Next.js(後端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在行動中:現實世界中的示例和項目 JavaScript在行動中:現實世界中的示例和項目 Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

See all articles