IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > DOM 元素尺寸與位置

DOM 元素尺寸與位置 時間:2018-09-26      來源:未知

一.獲取元素CSS大小

1.通過style獲取元素的大小

varbox = document.getElementById('box'); //獲取元素

box.style.width;

box.style.height;

PS:style獲取只能獲取到行內style屬性的CSS樣式中的寬和高,如果有,獲取;如果沒有,則返回空。

2.通過計算獲取元素的大小

varstyle = window.getComputedStyle ?

window.getComputedStyle(box,null) : null || box.currentStyle;

style.width; //1424px、200px、auto

style.height; //18px、200px、auto

PS:通過計算獲取元素的大小,無關你是否是行內、內聯或者鏈接,它經過計算后得到的結果返回出來。如果本身設置大小,它會返回元素的大小,如果本身沒有設置,非IE瀏覽器會返回默認的大小,IE瀏覽器返回auto。

3.通過CSSStyleSheet對象中的cssRules(或rules)屬性獲取元素大小

var sheet =document.styleSheets[0]; //獲取link或style

var rule = (sheet.cssRules ||sheet.rules)[0]; //獲取第一條規則

rule.style.width;

rule.style.height;

PS:cssRules(或rules)只能獲取到內聯和鏈接樣式的寬和高,不能獲取到行內和計算后的樣式。

總結:以上的三種CSS獲取元素大小的方法,只能獲取元素的CSS大小,卻無法獲取元素本身實際的大小。比如加上了內邊距(padding)、外邊距(margin)、邊框(border)、滾動條(scroll)之后的大小

二.獲取元素實際大小

測試代碼:

HTML部分:

<body>

<divid="box">

測Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

測試Div測試Div測試Div測試Div測試Div測試Div測試Div測試Div

</div>

</body>

CSS部分:

#box{

width:200px;

height:200px;

background:red;

overflow:scroll;

}

1.clientWidth和clientHeight

這組屬性可以獲取元素可視區的大小,可以得到元素內容及內邊距所占據的空間大小。

box.clientWidth; //200

box.clientHeight; //200

PS:返回了元素大小,但沒有單位,默認單位是px,如果設置了其他的單位,比如100em之類,返回出來的結果還會轉換為px像素。(CSS獲取的話,是照著你設置的樣式獲取)。

PS:對于元素的實際大小,clientWidth和clientHeight理解方式如下:

1.增加邊框,無變化,為200;

2.增加外邊距,無變化,為200;

3.增加滾動條,終值等于原本大小減去滾動條的大小,為184;

4.增加內邊距,終值等于原本大小加上內邊距的大小,為220;

PS:如果說沒有設置任何CSS的寬和高度,那么非IE瀏覽器會算上滾動條和內邊距的計算后的大小,而IE瀏覽器則返回0。

2.scrollWidth和scrollHeight

這組屬性可以獲取滾動內容的元素大小。

box.scrollWidth; //200

box.scrollWidth; //200

PS:返回了元素大小,默認單位是px。如果沒有設置任何CSS的寬和高度,它會得到計算后的寬度和高度。

PS:對于元素的實際大小,scrollWidth和scrollHeight理解如下

1.增加邊框,不同瀏覽器有不同解釋:

a) Firefox和Opera瀏覽器會增加邊框的大小,220 x 220

b) Chrome和Safari瀏覽器會忽略邊框大小,200 x 200

c) IE瀏覽器忽略邊框并且只顯示它有效內容的高度,200 x 18(單個“測試 Div”的高度為18)

2.增加內邊距,終值會等于原本大小加上內邊距大小,220 x 220,IE為220x 38

3.增加滾動條,終值會等于原本大小減去滾動條大小,184 x 184,IE為184x 18

4.增加外邊據,無變化。

5.增加內容溢出(若果沒有滾動條,不同瀏覽器兼容不同,所以加上滾動條overflow:scroll;),Firefox、Chrome和IE獲取實際內容高度,Opera比前三個瀏覽器獲取的高度偏小,Safari比前三個瀏覽器獲取的高度偏大。

3.offsetWidth和offsetHeight(穩定,使用頻率高!)

這組屬性可以返回元素實際大小,包含邊框、內邊距和滾動條。

box.offsetWidth; //200

box.offsetHeight; //200

PS:返回了元素大小,默認單位是px。如果沒有設置任何CSS的寬和高度,他會得到計算后的寬度和高度。

PS:對于元素的實際大小,offsetWidth和offsetHeight理解如下:

1.增加邊框,終值會等于原本大小加上邊框大小,為220;

2.增加內邊距,終值會等于原本大小加上內邊距大小,為220;

3.增加外邊據,無變化;

4.增加滾動條,無變化,不會減小;

HTML部分:

<body>

<divid="box">

測試Div

</div>

</body>

CSS部分:

#box{

width:200px;

height:200px;

background:red;

}

PS:對于元素大小的獲取,一般是塊級(block)元素并且以設置了CSS大小的元素較為方便。如果是內聯元素(inline)或者是沒有設置大小的元素就尤為麻煩,所以,建議使用的時候注意。

三.獲取元素周邊大小

1.clientLeft和clientTop

這組屬性可以獲取元素設置了左邊框和上邊框的大小。

box.clientLeft; //獲取左邊框的長度

box.clientTop; //獲取上邊框的長度

PS:目前只提供了Left和Top這組,并沒有提供Right和Bottom。如果四條邊寬度不同的話,可以直接通過計算后的樣式獲取,或者采用以上三組獲取元素大小的減法求得。

2.offsetLeft和offsetTop

這組屬性可以獲取當前元素相對于父元素的位置。

box.offsetLeft;

box.offsetTop;

PS:獲取元素當前相對于父元素的位置,好將此元素設置為絕對定位position:absolute;否則不同的瀏覽器會有不同的解釋。

PS:加上邊框和內邊距不會影響它的位置,但加上外邊距會累加。

box.offsetParent; //得到父元素

PS:offsetParent中,如果本身父元素是,非IE返回body對象,IE返回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;

}

3.scrollTop和scrollLeft

這組屬性可以獲取滾動條被隱藏的區域大小,也可設置定位到該區域。

box.scrollTop; //獲取滾動內容上方的位置(就是隱藏的內容的高度)

box.scrollLeft; //獲取滾動內容左方的位置

如果要讓滾動條滾動到初始的位置,那么可以寫一個函數:

functionscrollStart(element) {

if (element.scrollTop != 0) element.scrollTop = 0; //賦值為0;

}

上一篇:理解js中this的指向問題

下一篇:Android動畫

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 橡胶管_高压橡胶管_高压胶管_铠装高压胶管-河北远大新特橡塑有限公司 | 柱状_椰壳_蜂窝_果壳_粉状活性炭_活性炭厂家 - 銮桦净化 | 南京数控折弯机_安徽数控剪板机_数控开槽机-合肥小型液压折弯机系统批发厂家 | 我的建筑网-中国建筑工程行业门户网站! | 展馆展厅设计_数字多媒体展厅_3D全息投影_三维动画制作_企业宣传片|深圳市华南数字科技有限公司 斩天手游网_高质量手机游戏下载中心 | 热熔钻孔机【优质厂家】_多年热熔钻设备研发制造经验 | 温湿度记录仪_温度监控_冷链监控云平台_USB/PDF温度记录仪-深圳市鸿睿物联科技发展有限公司 | 珠海拾比佰彩图板股份有限公司 | 永光机械-小型建筑机械领航者,公司专注于小型建筑、工程机械的研发与制造 | 太阳能光伏发电_太阳能热水器_空气能热水器_直饮净水器_深圳市大兴节能环保科技有限公司 | 免费照片视频制作软件_照片做成视频的软件_制作照片视频的软件 - 万彩影像大师官网 | 塑料托盘 塑料周转箱零件盒生产销售-江苏卡尔富塑业科技有限公司 | 宿迁市华泰交通设施有限公司,上海第四代路名牌,天津仿罗马柱路名牌,标准路名牌,路名牌灯箱,公交站台,户外广告灯箱, 交通标志牌,社区阅报栏 | 陶瓷-超高速胶体磨-高剪切胶体磨厂家价格-上海思峻机械设备有限公司 | 九洲集团官网(300040)—哈尔滨九洲集团股份有限公司 | 无缝钢管生产厂家-20G-L360N无缝钢管价格-天津海诚无缝钢管集团 无尘投料站-真空上料机-旋振筛|超声波振动筛|摇摆筛|筛分机-新乡市欧霖佳机械有限公司 | 深圳展厅设计_产业园区展馆设计_展馆设计公司_健康产业展馆设计_展厅设计哪家好_华竣国际 | 外圆/圆管抛光机_方管抛光机/除锈机_活塞杆抛光机-不锈钢管抛光机-邢台欧邦机械 | 万级无菌室-阳性对照室-干细胞实验室-广州沃霖实验室设备有限公司 | 液体灌装机_全自动灌装机_大桶灌装机_200L灌装机_涂料油漆灌装机-昆山灌装自动化设备有限公司 | 深圳展厅设计_产业园区展馆设计_展馆设计公司_健康产业展馆设计_展厅设计哪家好_华竣国际 | 西安男科医院_陕西男性专科医院_陕西老医协生殖医学医院【官网】 | 塑料植草格_停车场植草格_消防车道植草格厂家_山东朋联建材 | 在线计算网 - 超多超好用的在线小工具 | 两面针(江苏)实业有限公司-原两面针(扬州)酒店用品有限公司 | 宁波必沃纺织机械有限公司—优质针织电脑横机专业制造商 | 陕西老医协生殖医学医院_陕西省老医协生殖医学医院【官方网站】 陕西教师资格网-陕西教师资格考试网 | 真空清洗炉_电磁感应真空清洗炉-盐城市盛逸化纤机械有限公司 | 型材散热器,电子散热器,插片散热器-镇江市科创电子散热器有限公司 | 自动隔油提升设备,消防稳压一体设备,苏州不锈钢消防水箱,污水提升设备厂家,无负压变频供水设备厂家-苏州脉泉供水设备有限公司 | 学汽修,汽修培训,西安汽车维修培训学校,西安万通汽车学校[官网] 削片机|木材破碎机|木材粉碎机|模板破碎机|双轴撕碎机_郑州木工机械制造厂 | 铱金供应-上海钌合金-氯铱酸厂家-上海庞势新材料科技有限公司 | 万向轴承_福来轮_全向轮_双向转轮_万向球_算盘轮_塑料卷轴-宁津县正彤机械塑料有限公司 | 陶瓷靶材_氧化铌靶材_合金靶材_专注河北氧化铌靶材批发-河北东同光电科技有限公司 | 中山电子控制板|中山工业控制板|中山市云禾电子科技有限公司 | 九江江菱电梯有限公司 | 邮政纸箱_淘宝纸箱_抗压纸箱,盐城纸箱,盐城纸箱厂家,盐城承重纸箱-盐城君雅纸箱 | 化工网-化工新闻资讯平台-中华化工行业门户网站 | 津成电线电缆价格,天津津成线缆,津成线缆销售电话,天津津成线缆批发电话-天津市津成电线电缆有限公司 | 泡酒配方大全-泡药酒专业的网站-泡酒之家 | 苏州妙凯电子有限公司-供应军工电源芯片|线性恒流IC|开关电源IC|LED驱动芯片|MOS管|IPM|IGBT|MCU开发|电源模块 |