国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript中的各種寬高屬性

wangbinke / 2351人閱讀

摘要:在中,存在著多的關于高度和寬度的屬性,比如等等這么多,傻傻分不清也正常啊。第二問題對象的屬性引用的是對象,表示該窗口中當前顯示文檔的。如果出現滾動條,滾動條會遮蓋元素的寬高,那么該屬性就是其本來寬高減去滾動條的寬高。

在js中,存在著N多的關于高度和寬度的屬性,比如:clientHeight、offsetHeight、scrollHeight、availHeight、scrollLeft、scrollTop、style.height、innerHeight、outerHeight、scree.height等等......這么多,傻傻分不清也正常啊。
本文的目標:

理清js及jquery的各種width和height

對width和高度做一些實際的應用

window和document

首先我們來高清兩個概念:

window和document的區別是什么?

window.location和document.location是一樣嗎?

第一個問題:

Window對象表示瀏覽器中打開的窗口;window對象可以省略。比如alert()、window.alert()。

Document對象是Window對象的一部分。那么document.body 我們可以寫成window.document.body;瀏覽器的HTML文檔成為Document對象。

第二問題:
window對象的location屬性引用的是Location對象,表示該窗口中當前顯示文檔的URL。
document的對象的location屬性也是引用了Location對象。
那意思是:

window.location === document.location;  //true

在通常情況下一樣,frame也是一樣

與window相關的寬高介紹

與window相關的寬高有一下幾個:

window.innerWidth,通過字面意思我們知道這是一個內部的寬度

window.innerHeight,內部的高度

window.outWidth,外部的寬度

window.outHeight,外部的高度

window.innerHeight和window.outHeight

我發現在Windows 10下Chrome和360安全瀏覽器不一樣、、、、(后面代碼測試部分)

window.innerWidth和window.outWidth

掛靠在window下的寬高還有window.screen, window.screen包含有關用戶屏幕的信息。它包括:

window.screen.width

window.screen.height

window.screen.availHeight

window.screen.availWidth

window.screenTop

window.screenLeft

圖解


window相關寬高代碼演示

演示代碼:

console.log("innerWidth=",innerWidth);
console.log("innerHeight=",innerHeight);
console.log("outerWidth=",outerWidth);
console.log("outerHeight=",outerHeight);

Chrome瀏覽器下效果

代碼:

console.info("screen.width=",screen.width);
console.info("screen.height=",screen.height);
console.info("screen.availWidth=",screen.availWidth);
console.info("screen.availHeight=",screen.availHeight);

在Chrome瀏覽器下效果

window相關寬高瀏覽器兼容問題

innerHeight和outerHeight是不支持IE9以下版本的,而screen系列則不存在兼容問題。

document下面client相關寬高介紹

docment下有三類屬性:

與client相關的寬高

與offset相關的寬高

與scroll相關的寬高

與client相關的寬高

與client相關的寬高又有如下幾個屬性:

document.body.clientWidth

document.body.clientHeight

document.body.clientLeft

document.body.clientTop

clientWidth和clientHeight
該屬性指的是元素的可視部分寬度和高度,即padding+contenr
如果沒有滾動條,即為元素設定的高度和寬度。
如果出現滾動條,滾動條會遮蓋元素的寬高,那么該屬性就是其本來寬高減去滾動條的寬高。

我們來看如下代碼:

body{
     border: 20px solid #000;
     margin: 10px;
     padding: 40px;
     background: #eee;
     height: 350px;
     width: 500px;
     overflow: scroll;
}

console.log(document.body.clientHeight);    //430(padding*2+height)
console.log(document.body.clientWidth);     //580(padding*2+width)

我們再看下面的代碼:

#mydiv{
      width: 200px;
      height: 200px;
      background: red;
      border: 1px solid #000;
      overflow: auto;
}

在DIV中添加文字知道出現滾動軸,這時候

var mydiv = document.getElementById("mydiv");
console.log("mydiv.clientHeight=",mydiv.clientHeight);    // 200
console.log("mydiv.clientWidth=",mydiv.clientWidth);      // 183(減去了滾動條的寬度)

而在Mac系統下,滾動條不占高度,這時候client的寬度還是200.

總結

假入無padding無滾動條,clientWidth=style.width

假如有padding無滾動軸,clientWidth=style.width+style.padding*2

假如有padding有滾動,且滾動是顯示的,clientWidth=style.width+style.padding*2-滾動軸寬度

clientLeft和clientTop

這兩個返回的是元素周圍邊框的厚度,如果不指定一個邊框或者不定位該元素,他的值就是0.

我們還是以body為例:

body{
     border: 20px solid #000;
     margin: 10px;
     padding: 40px;
     background: #eee;
     height: 350px;
     width: 500px;
     overflow: scroll;
}

console.log(document.body.clientLeft);    //20
console.log(document.body.clientTop);    //20

這一對屬性是用來讀取元素的body的寬度和高度的

clientTop=border-top的border-width

clientLeft=border-left的border-width

與offset相關寬高介紹

與offset相關的寬高又有如下幾個屬性:

document.body.offsetWidth

document.body.offsetHeight

document.offsetLeft

document.offsetTop

offsetWidth與offsetHeight
這一對屬性指的是元素的border+padding+content的寬度和高度。

該屬性和其內部的內容是否超出元素大小無關,只和本來設定的border以及width和height有關。
我們還是以body為例:

body{
     border: 20px solid #000;
     margin: 10px;
     padding: 40px;
     background: #eee;
     height: 350px;
     width: 500px;
     overflow: scroll;
}

console.log("offsetWidth=",document.body.offsetWidth); 
//620(width+margin*2+padding*2+border*2)
console.log("offsetHeight=",document.body.offsetHeight);    
//470(width+margin*2+padding*2+border*2)

總結

假如無padding無滾動條無border:

offsetWidth=clientWidth=style.width

假如有padding無滾動條有border:

offsetWidth=style.width+style.padding2+(border-width)2

offsetWidth=clientWidth+border寬度*2

假如有padding有滾動條,且滾動條是顯示的,有border:

offsetWidth=style.width+style.padding2+(border-width)2

offsetWidth=clientWidth+滾動條寬度+border寬度*2

offsetLeft和offsetTop
這兩個屬性是基于offsetParent的,了解這兩個屬性我們必須先了解它,什么是offsetParent呢?

如果當前元素的父級元素沒有進行CSS定位(position為absolute或relative),offsetParent為border.

假如當前元素的父級元素中有CSS定位,offsetParent取最近的那個父級元素。

在IE6/7中:
offsetLeft=(offsetParent的padding-left)+(當前元素的margin-left)

在IE8/9/10及Chrome中:
offsetLeft=(offsetParent的margin-left)+(offsetParent的border寬度)+(offsetParentd的padding-left)+(當前元素的margin-left)

在FireFox中:
offsetLeft=(offsetParent的margin-left)+(當前元素的margin-left)+(offsetParent的padding-left)

、、、、看到這里是不是已經懵逼了?、、、還是舉例子吧:

CSS:

body{
    border: 20px solid #000;
    margin: 10px;
    padding: 40px;
    background: #eee;
    height: 350px;
    width: 500px;
}
#mydiv{
    width: 400px;
    height: 200px;
    padding: 20px;
    margin :10px;
    background: #f60;
    border: 20px solid #888;
}

在IE8/910及Chrome中
mydiv.offsetLeft = 80
mydiv.offsetTop = 80

在火狐中
mydiv.offsetLeft = 60
mydiv.offsetTop = 60

在IE低版本IE6/7中是
mydiv.offsetLeft = 50
mydiv.offsetTop = 50

與scroll相關寬高介紹

與scroll相關的寬高屬性有如下幾個:

document.body.scrollWidth

document.body.scrollHeight

document.body.scrollLeft

document.body.scrollTop

scrollWidth和scrollHeight
document.body的scrollWidth和scrollHeight與div的scrollWidth和scrollHeight是有區別的。

我們先來看看document.body的scrollWidth和scrollHeight:

給定寬高小于瀏覽器窗口

scrollWidth通常是瀏覽器窗口的寬度

scrollHeight通常是瀏覽器窗口的高度

給定寬高大于瀏覽器窗口,且內容小于給定寬高

scrollWidth給定的寬度+其所有padding、margin和border

scrollHeight給定的高度+其所有的padding、margin和border

給定寬高大于瀏覽器窗口,且內容大于給定寬高

scrollWidth內容寬度+其所有的padding、margin和border

scrollHeight內容高度+其所有的padding、margin和border

再來看看在某div中scrollWidth和scrollHeight:

在無滾動軸的時候

scrollWidth==clientWidth=style.width+style.padding*2

在有滾動軸的時候

scrollWidth==實際內容的寬度+padding*2
scrollHeight==實際內容的高度+padding*2

scrollLeft和scrollTop
這對屬性是可讀寫(可被重新賦值) 的,指的是當元素其中的內容超出其寬高的時候,元素被卷起來的高和寬度。
obj.style.width和obj.style.height
對于一個dom元素,它的style屬性返回的是一個對象,這個對象中的任意一個屬性是可讀寫的,style.width等于CSS屬性中的寬度style.height等于CSS屬性中的高度。

Event對象的5種坐標

哪五種坐標?

clientX和clientY,相對于瀏覽器(可是區左上角0,0)的坐標

screenX和screenY,相對于設備屏幕左上角(0,0)的坐標

offsetX和offsetY,相對于事件源左上角(0,0)的坐標

pageX和pageY,相對于整個網頁左上角(0,0)的坐標

X和Y,本來是IE屬性,相對于用CSS動態定位的最內層包容元素

本文內容整理自慕課網課程《JS/jQuery寬高的理解和應用》課程講解和PPT

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80930.html

相關文章

  • JavaScript中的各種寬高以及位置總結

    摘要:和這一對屬性是用來讀取元素的的寬度和高度的。第二部分對象在中,對于元素的運動的操作通常都會涉及到對象,而對象也存在很多位置屬性,且由于瀏覽器兼容性問題會導致這些屬性間相互混淆,這里一一講解。文章轉自中的各種寬高以及位置總結 在javascript中操作dom節點讓其運動的時候,常常會涉及到各種寬高以及位置坐標等概念,如果不能很好地理解這些屬性所代表的意義,就不能理解js的運動原理,同時...

    microelec 評論0 收藏0
  • Javascript零碎之各種寬高屬性及應用

    摘要:一掛在上的上最常用的只有其中,永遠都是窗口的大小,跟隨窗口變化而變化。這個是距該元素最近的不為的祖先元素,如果沒有則指向元素。 在Javascript的開發過程中,我們總會看到類似如下的邊界條件判斷(懶加載): const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.b...

    DevYK 評論0 收藏0
  • javascript各種寬高、間距總結

    一、DOM對象 1、只讀屬性 (1)clientWidth、clientHeight: padding + content ( - scroll寬度 )(2)offsetWidth、offsetHeight:padding + content + border(3)clientTop、clientLeft:border的top、border的left(4)offsetTop、offsetLeft:...

    DC_er 評論0 收藏0
  • 【前端工程師手冊】前端應該知道的各種寬高

    摘要:和都是相對于內邊距邊界的。和即為向上滾動時,元素內容區被遮住的那一部分。同理參考中的各種寬高屬性 引子 曾經校招面試的時候,學習了三個月前端的我去某廠面試,面試官循循善誘考察了一個開發中的實際場景,其中有需要用到某元素的高度,面試官問我clientHeight和offsetHeight的區別是什么,我當時一臉懵逼,這個問題對于當時的我來說已經完全超綱了...面試結果自然是面試官感謝我來...

    jayce 評論0 收藏0
  • 【前端工程師手冊】前端應該知道的各種寬高

    摘要:和都是相對于內邊距邊界的。和即為向上滾動時,元素內容區被遮住的那一部分。同理參考中的各種寬高屬性 引子 曾經校招面試的時候,學習了三個月前端的我去某廠面試,面試官循循善誘考察了一個開發中的實際場景,其中有需要用到某元素的高度,面試官問我clientHeight和offsetHeight的區別是什么,我當時一臉懵逼,這個問題對于當時的我來說已經完全超綱了...面試結果自然是面試官感謝我來...

    Hujiawei 評論0 收藏0

發表評論

0條評論

wangbinke

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<