首頁 web前端 js教程 JavaScript取得元素尺寸和大小操作總結_javascript技巧

JavaScript取得元素尺寸和大小操作總結_javascript技巧

May 16, 2016 pm 04:12 PM
javascript 位置 大小 獲取

一、取得元素的行內樣式

複製程式碼 程式碼如下:

var obj = document.getElementById("test");
alert(obj.height "n" obj.width);
// 200px 200px typeof=string只是將style屬性中的值顯示出來

二、取得計算後的樣式

複製程式碼 程式碼如下:

var obj = document.getElementById("test");
var style = null;
if (window.getComputedStyle) {
    style = window.getComputedStyle(obj, null);    // 非IE
} else {
    style = obj.currentStyle;  // IE
}
alert("width=" style.width "nheight=" style.height);

注意:如果不設定元素的寬度和高度,那麼在非IE瀏覽器下傳回預設的寬度和高度。在IE下面返回auto字串

三、取得

複製程式碼 程式碼如下:

var obj = document.styleSheets[0]; // [object StyleSheetList] 樣式表的數量var rule = null;// [object CSSRule]
if (obj.cssRules){
    rule = obj.cssRules[0];  // 非IE [object CSSRuleList]
} else {
    rule = obj.rules[0];     // IE [object CSSRuleList]
}
alert(rule.style.width);

cssRules(或rules)只能取得到內聯和連結樣式的寬和高,不能取得到行內和計算後的樣式。

總結:以上的三種CSS取得元素大小的方法,只能取得元素的CSS大小,卻無法取得元素本身實際的大小。例如加上了內邊距、捲軸之類的。

四、取得元素的實際大小

1. clientWidth和clientHeight
    這群屬性可以取得元素視覺區的大小,可以得到元素內容及內邊距所佔據的空間大小。回傳了元素大小,但沒有單位,預設單位是px,如果你強行設定了單位,例如100em之類,它還是會回傳px的大小。 (CSS取得的話,是照著你設定的樣式取得)。對於元素的實際大小,clientWidth和clientHeight理解方式如下:
    a. 增加邊框,無變化;
    b. 增加外邊距,無變化;
    c. 增加捲軸,最終值等於原本大小減去捲軸的大小;
    d. 增加內邊距,最終值等於原本大小加上內邊距的大小;

複製程式碼 程式碼如下:


#test{
    background-color: green;
    width: 200px;
    height: 200px;
    border: solid 5px red;  /* 對應a理解,結果:200,200 */
    margin: 10px;  /* 對應b理解,結果:200,200*/
    padding: 20px;  /* 對應c理解,結果:240,240*/
    overflow: scroll;  /* 對應d理解,結果:223,223,223=200(css大小) 40(兩邊內邊距)-17(滾動條寬度)*/
}
window.onload = function(){
    var obj = document.getElementById("test");
    alert(obj.clientWidth "," obj.clientHeight);
};

注意:如果說沒有設定任何CSS的寬和高度,那麼非IE瀏覽器會算上滾動條和內邊距的計算後的大小,而IE瀏覽器則回傳0(IE8已修復)。

2. scrollWidth和scrollHeight
    這組屬性可以取得滾動內容(可見內容)的元素大小。傳回了元素大小,預設單位是px。如果沒有設定任何CSS的寬和高度,它會得到計算後的寬度和高度。對於元素的實際大小,scrollWidth和scrollHeight理解如下:
    1. 增加邊框,不同瀏覽器有不同解釋(下面在IE8中運作正常,IE6運作不正常):
a) Firefox和Opera瀏覽器會增加邊框的大小,220x220
b) IE、Chrome和Safari瀏覽器會忽略邊框大小,200x200
c) IE瀏覽器只顯示它本來內容的高度,200x18(IE8已經修改這個問題)
    2. 增加內邊距,最終值會等於原本大小加上內邊距大小,220x220,IE為220x38
    3. 增加捲軸,最終值會等於原本大小減去捲軸大小,184x184,IE為184x18
    4. 增加外邊邊據,無變動。
    5. 增加內容溢出,Firefox、Chrome和IE取得實際內容高度,Opera比前三個瀏覽器取得的高度偏小,Safari比前三個瀏覽器取得的高度偏大。

3. offsetWidth和offsetHeight
    這組屬性可以傳回元素實際大小,包含邊框、內邊距和捲軸。傳回了元素大小,預設單位是px。如果沒有設定任何CSS的寬和高度,他會得到計算後的寬度和高度。對於元素的實際大小,offsetWidth和offsetHeight理解如下:
    1.增加邊框,最終值會等於原本大小加上邊框大小,為220;
    2.增加內邊距,最終值會等於原本大小加上內邊距大小,為220;
    3.增加外邊據,無變動;
    4.增加捲軸,無變化,不會減少;
    對於元素大小的獲取,一般是區塊級(block)元素並且以設定了CSS大小的元素較為方便。如果是內聯元素(inline)或沒有設定大小的元素就特別麻煩,所以,建議使用的時候要注意。

複製程式碼 程式碼如下:

test div element

#test{
    background-color: green;
    width: 200px;
    height: 200px;
    border: solid 10px red; /*結果:220,220*/
    margin: 10px; /*結果:220,220(無變化)*/
    padding: 10px; /*結果:240,240*/
    overflow:scroll; /*結果:240,240(無變化)*/
}
window.onload = function(){
    var obj = document.getElementById("test");
    alert(obj.offsetWidth "," obj.offsetHeight);
};

五、取得元素週邊大小
1. clientLeft和clientTop取得邊框大小
    這組屬性可以取得元素設定了左邊框和上邊框的大小。目前只提供了Left和Top這組,並沒有提供Right和Bottom。如果四條邊寬度不同的話,可以直接透過計算後的樣式獲取,或者採用以上三組獲取元素大小的減法求得。
右邊框的寬度:obj.offsetWidth-obj.clientWidth-obj.clientLeft
底邊框的寬度:obj.offsetHeight-obj.clientHeight-obj.clientTop

複製程式碼 程式碼如下:

test div element

#test{
    background-color: green;
    width: 200px;
    height: 200px;
    border-top: solid 10px red;s
    border-right: solid 20px #00ff00;
    border-bottom: solid 30px blue;
    border-left: solid 40px #808080;
}
window.onload = function(){
    var obj = document.getElementById("test");
    alert(obj.clientLeft "," obj.clientTop); // 40,10
};

2. offsetLeft和offsetTop   
    這組屬性可以取得目前元素相對於父元素的位置。取得元素目前相對於父元素的位置,最好將它設定為定位position:absolute;否則不同的瀏覽器會有不同的解釋。
a、將position設定為absolute,則所有瀏覽器傳回相同的值。如:

複製程式碼 程式碼如下:

test div element

#test{
    background-color: green;
    width: 200px;
    height: 200px;
    position: absolute;
    left: 30px;
    top: 20px;
}
window.onload = function(){
    var obj = document.getElementById("test");
    alert(obj.offsetLeft "," obj.offsetTop); // 30, 20
};

b、加上邊框和內邊距不會影響它的位置,但加上外邊據會累積。

3、box.offsetParent得到父元素
    offsetParent中,如果本身父元素是

,非IE回傳body對象,IE(IE6)返回html對象。如果兩個元素嵌套,如果上父元素沒有使用定位position:absolute,那麼offsetParent將傳回body物件或html物件。所以,在取得offsetLeft和offsetTop時候,CSS定位很重要。
    如果說,在很多層次裡,外層已經定位,我們要怎麼取得裡層的元素距離body或html元素之間的距離呢?也就是取得任一個元素距離頁面上的位置。那我們可以寫函數,透過不停的向上回溯獲取累加來實現。

複製程式碼 程式碼如下:

box.offsetTop box.offsetParent.offsetTop;     // 只有兩層的情況下
 
function offsetLeft(element){
    var left = element.offsetLeft; // 得到第一層距離
    var parent = element.offsetParent; // 得到第一個父元素
    while (parent !== null) { // 如果還有上一層父元素
        left = parent.offsetLeft; // 把本層的距離累積
        parent = parent.offsetParent; // 得到本層的父元素
    } //然後繼續循環
    return left;
}

4.scrollTop和scrollLeft
    這組屬性可以取得捲軸被隱藏(捲軸上方區域)的區域大小,也可設定定位到該區域。如果要讓捲軸滾動到最初始的位置,那麼可以寫一個函數:

複製程式碼 程式碼如下:

function scrollStart (element) {
    if ( element.scrollTop != 0 ) {
        element.scrollTop = 0;
    }
}

5、getBoundingClientRect()
這個方法傳回一個矩形對象,包含四個屬性:left、top、right和bottom。分別表示元素各邊與頁面上邊和左邊的距離。

複製程式碼 程式碼如下:

var box=document.getElementById('box');     // 取得元素
alert(box.getBoundingClientRect().top);         // 元素上邊距離頁面上邊的距離
alert(box.getBoundingClientRect().right);       // 元素右邊距離頁面左邊的距離
alert(box.getBoundingClientRect().bottom);  // 元素下邊距離頁面上邊的距離
alert(box.getBoundingClientRect().left);         // 元素左邊距離頁面左邊的距離

注意:IE、Firefox3 、Opera9.5、Chrome、Safari支持,在IE中,預設座標從(2,2)開始計算,導致最終距離比其他瀏覽器多出兩個像素,我們需要做個相容。

複製程式碼 程式碼如下:

document.documentElement.clientTop; //非IE為0,IE為2
document.documentElement.clientLeft; //非IE為0,IE為2
functiongGetRect (element) {
    var rect = element.getBoundingClientRect();
    var top = document.documentElement.clientTop;
    var left= document.documentElement.clientLeft;
    return{
        top  :   rect.top - top,
        bottom  :   rect.bottom - top,
        left  :   rect.left - left,
        right  :    rect.right - left
    }
}

分別加上外邊據、內邊距、邊框和捲軸,用來測試所有瀏覽器是否一致。

以上就是本文所述的全部內容了,希望小夥伴們能夠喜歡。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱工具

記事本++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 教程
1317
25
PHP教程
1268
29
C# 教程
1242
24
星穹鐵道克勞克影視樂園摺紙小鳥位置 星穹鐵道克勞克影視樂園摺紙小鳥位置 Mar 27, 2024 pm 11:51 PM

星穹鐵道克勞克影視樂園總共有20隻摺紙小鳥,有很多玩家不知道克勞克影視樂園摺紙小鳥在哪,小編已經把每隻摺紙小鳥位置全部都總結出來了,幫助大家進行尋找,具體內容一起來看看這篇克勞克影視樂園摺紙小鳥位置最新匯總。崩壞星穹鐵道攻略大全星穹鐵道克勞克影視樂園摺紙小鳥位置1、克勞克影視樂園一層2、克勞克影視樂園二層

谷歌安全碼在哪裡獲取 谷歌安全碼在哪裡獲取 Mar 30, 2024 am 11:11 AM

谷歌驗證器是一種用於保護使用者帳戶安全的工具,其金鑰是用於產生動態驗證碼的重要資訊。如果忘記了谷歌驗證器的金鑰,只能透過安全碼進行驗證,那麼下文站小編就會為大家帶來谷歌安全碼在哪裡取得的詳細內容介紹,希望能幫助到大家,想要了解的用戶們就請跟著下文繼閱讀吧!首先開啟手機設置,進入設定頁面。下拉頁面,找到Google。進入Google頁面,點選Google帳號。進入帳號頁面,點選驗證碼下方的檢視。輸入密碼或使用指紋驗證身分。取得Google安全碼,利用安全碼驗證Google身分。

了解pip安裝包儲存的位置和結構 了解pip安裝包儲存的位置和結構 Jan 18, 2024 am 08:23 AM

深入了解pip安裝的套件存放位置,需要具體程式碼範例pip是Python語言常用的套件管理工具,用於方便安裝、升級和管理Python套件。在使用pip安裝套件時,它會自動從PyPI(Python套件索引)下載對應的套件文件,並將其安裝到指定的位置。那麼,pip安裝的套件究竟存放在哪裡呢?這是很多Python開發者都會遇到的問題。本文將深入探討pip安裝的套件存放位置,並提供

如何在VirtualBox中增加磁碟大小[指南] 如何在VirtualBox中增加磁碟大小[指南] Mar 17, 2024 am 10:10 AM

我們經常遇到預定義磁碟大小沒有空間容納更多資料的情況?如果您在稍後階段需要更多的虛擬機器硬碟空間,則必須擴充虛擬硬碟和分割區。在這篇文章中,我們將看到如何在VirtualBox中增加磁碟大小。增加VirtualBox中的磁碟大小重要的是要注意,您可能希望在執行這些操作之前備份您的虛擬硬碟文件,因為總是有可能出錯。有備份總是一個好的做法。然而,該過程通常運作良好,請確保在繼續之前關閉您的機器。有兩種方法可以增加VirtualBox中的磁碟大小。使用圖形使用者介面擴充VirtualBox的磁碟大小使用CL

win11關機位置 win11關機位置 Jan 10, 2024 am 09:14 AM

如果我們要長時間離開電腦,那麼最好將電腦關機保護它,那麼win11關機在哪裡呢,其實一般來說只要打開開始選單,在其中就可以找到關機按鈕了。 win11關機在哪裡:答:在開始功能表的電源按鈕。 1.首先我們點選底部工作列的「windows標誌」開啟「開始功能表」2、開啟後,可以在右下角找到「電源」按鈕,如圖所示。 3.點擊電源按鈕後,就能看到「關機」了,點擊它就能關機。 4.如果因為當機等特殊狀況無法關機,那麼可以直接用電腦上的「電源鍵」長按強制關機。

最後紀元競技場在哪 最後紀元競技場在哪 Mar 07, 2024 pm 08:16 PM

在《最後紀元》中,玩家可以玩多種形式,如遊戲模式、挑戰模式和競技場等。競技場則是遊戲的終極玩法,提供兩種模式供玩家選擇。最後紀元競技場在哪裡答:競技場屬於終局玩法,具體位置在冠軍之門。需要取得競技場鑰匙或記憶的競技場鑰匙,右鍵後可見世界地圖,並能找到冠軍之門的具體位置。競技場分為兩大模式:競技場冠軍模式和無盡競技場模式。前者包括40波敵人與選擇的獎勵,總要在與競技場冠軍的較量中達到頂峰。競技場冠軍模式共有4階段,難度越高,獎勵越好。無盡競技場是無限波次的模式,難度逐漸增加,成績最好的挑戰者將

美團天天神券位置在哪_美團天天神券位置介紹 美團天天神券位置在哪_美團天天神券位置介紹 Mar 27, 2024 pm 05:11 PM

1.我們打開手機中的美團,然後在首頁點選左上角的外帶選項。 2.進入外帶的平台頁面之後,在首頁就可以看到有天天神券的板塊了,直接點擊。 3.進入天天神券之後,就會看到很多的活動,點擊完成,然後我們完成任務就可以獲得獎勵了。

快手發佈於哪裡怎麼改位置?已經上傳的影片怎麼加入位置? 快手發佈於哪裡怎麼改位置?已經上傳的影片怎麼加入位置? Mar 21, 2024 pm 06:00 PM

作為國內知名的短影片平台,快手為許多創作者提供了展現才華和分享生活的機會。在上傳影片時,一些新手創作者可能會困惑於如何更改影片發布位置。本文將為您介紹快手影片發布位置的更改方法,並分享一些快手影片發布的技巧,幫助您更好地利用這個平台展示自己的作品。一、快手發佈於哪裡怎麼改位置? 1.發布介面:在快手APP中,點選「發布」按鈕,進入影片發佈介面。 2.位置資訊:在發佈介面,有「位置」欄,點選進入位置選擇介面。 3.更改位置:在位置選擇介面,點選「定位」按鈕,可以查看目前所在位置。如需更改位置,點擊「位

See all articles