搜尋
首頁web前端js教程JavaScript取得元素尺寸和大小操作總結_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
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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