亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript獲取元素尺寸和大小操作總結

2019-11-20 13:05:32
字體:
來源:轉載
供稿:網友

一、獲取元素的行內樣式

復制代碼 代碼如下:

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字符串

三、獲取<link>和<style>標簽寫入的樣式

復制代碼 代碼如下:

var obj = document.styleSheets[0]; // [object StyleSheetList] 樣式表的個數<link>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. 增加內邊距,最終值等于原本大小加上內邊距的大小;

復制代碼 代碼如下:

<div id="test"></div>
#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)或者沒有設置大小的元素就尤為麻煩,所以,建議使用的時候注意。

復制代碼 代碼如下:

<div id="test">test div element</div>
#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

復制代碼 代碼如下:

<div id="test">test div element</div>
#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,則所有瀏覽器返回一樣的值。如:

復制代碼 代碼如下:

<div id="test">test div element</div>
#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中,如果本身父元素是<body>,非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
    }
}

分別加上外邊據、內邊距、邊框和滾動條,用于測試所有瀏覽器是否一致。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.日韩不卡电影av| 国产一区二区日韩精品欧美精品| 国产精品网址在线| 欧美久久精品午夜青青大伊人| 久久精品久久久久电影| 成人h视频在线观看播放| 欧美乱大交做爰xxxⅹ性3| 日韩精品中文字幕在线| 久久久最新网址| 日本a级片电影一区二区| 91高清免费视频| 久久国产视频网站| 成人黄色在线免费| 亚洲国产成人精品一区二区| 亚洲免费视频一区二区| 国产精品天天狠天天看| 69久久夜色精品国产7777| 2018日韩中文字幕| 成人久久久久久| 欧美精品成人91久久久久久久| 日本在线精品视频| 国产福利成人在线| 亚洲国产精彩中文乱码av| 欧美另类高清videos| 黑人与娇小精品av专区| 国产福利视频一区二区| 国产精品福利观看| 亚洲人午夜精品| 伊人激情综合网| 91国产美女在线观看| 亚洲视频免费一区| 久久久久久久久久婷婷| 亚洲第一视频网站| 琪琪第一精品导航| 欧美老女人bb| 久久久久久69| 亚洲在线免费视频| 国产一区二区三区高清在线观看| 国产亚洲人成网站在线观看| 亚洲第一天堂无码专区| 在线观看日韩专区| 国产欧美日韩精品在线观看| 国产精品永久免费视频| 日韩欧美在线视频| 中文字幕欧美专区| 日韩精品黄色网| 另类美女黄大片| 国产精品日韩欧美综合| 亚洲国产成人爱av在线播放| 国产精品网站入口| 成人免费看吃奶视频网站| 欧美日韩在线视频首页| 午夜免费在线观看精品视频| 国产精品久久久久久久久粉嫩av| 国产精品成久久久久三级| 亚洲最新av在线| 高跟丝袜欧美一区| 欧美激情视频一区二区三区不卡| 亚洲天堂男人天堂| 高清欧美性猛交xxxx黑人猛交| 91精品久久久久久久久久久久久久| 亚洲国产美女精品久久久久∴| 亚洲一区二区中文字幕| 国产成人精品av在线| 欲色天天网综合久久| 亚洲最新视频在线| 亚洲美女精品成人在线视频| 国产精品视频久久| 日韩免费不卡av| 欧美激情一级二级| 久久天天躁狠狠躁夜夜爽蜜月| 国产在线视频2019最新视频| 68精品久久久久久欧美| 国产成人精品一区| 欧美性生交xxxxxdddd| 欧美性猛交视频| 91在线视频免费| 成人性生交xxxxx网站| 欧美日韩免费在线| 性色av一区二区咪爱| 久久成人亚洲精品| 欧洲成人免费视频| 国产精品a久久久久久| 欧美性猛交99久久久久99按摩| 奇米四色中文综合久久| 久久视频在线观看免费| 日韩欧美国产中文字幕| 91精品久久久久久久久久| 日韩色av导航| 国产欧美日韩精品专区| 成人国产精品色哟哟| 欧美激情一区二区三区在线视频观看| 国产精品日韩欧美| 亚洲娇小xxxx欧美娇小| 亚洲老头老太hd| 北条麻妃一区二区在线观看| 日韩精品久久久久久福利| 日本久久久a级免费| 亚洲电影成人av99爱色| 色爱av美腿丝袜综合粉嫩av| 97av在线播放| 亚洲第一在线视频| 亚洲欧美日韩在线高清直播| 97国产精品免费视频| 欧美日韩国产一中文字不卡| 美女av一区二区三区| 亚洲欧美日韩一区二区三区在线| 日韩精品在线视频美女| 亚洲国产另类久久精品| 欧美激情在线观看视频| 国产精品久久久久影院日本| 国产成人精品久久久| 欧美日韩激情视频8区| 亚洲福利视频免费观看| 亚洲人成绝费网站色www| 成人精品福利视频| 最近中文字幕mv在线一区二区三区四区| 正在播放国产一区| 亚洲成年人影院在线| 欧美高清在线视频观看不卡| 性欧美视频videos6一9| 亚洲综合社区网| 国产精品第七影院| 亚洲国模精品一区| 97香蕉超级碰碰久久免费的优势| 一区二区亚洲欧洲国产日韩| 久久久www成人免费精品张筱雨| 亚洲精品福利资源站| 国产91在线高潮白浆在线观看| 欧美日韩国产一区二区三区| 成人性生交大片免费看小说| 日韩影视在线观看| 久久99亚洲热视| 国产精品视频区| 国产精品免费在线免费| 精品日韩视频在线观看| 九九精品视频在线观看| 少妇久久久久久| 国产在线观看精品| 色偷偷偷亚洲综合网另类| 精品视频在线播放| 国模极品一区二区三区| 亚洲有声小说3d| 久久免费观看视频| 国产精品99一区| 亚洲精品98久久久久久中文字幕| 97视频在线观看免费高清完整版在线观看| 热久久免费国产视频| 国自产精品手机在线观看视频| 日韩av色综合| 日韩欧美aⅴ综合网站发布| 日本高清+成人网在线观看| 蜜臀久久99精品久久久久久宅男| 色与欲影视天天看综合网| 亚洲综合一区二区不卡| 国产精品露脸av在线| 91在线精品视频| 91精品国产色综合久久不卡98口| 国产精品手机播放| 亚洲日本aⅴ片在线观看香蕉| 欧美精品福利视频| 日本一区二区三区四区视频| 在线精品高清中文字幕| 欧美华人在线视频|