javascript - 所有的檢視屬性和方法(offsetHeight、clientHeight、scrollHeight、innerHeight等)

發表於2020-04-16

注意:本文只簡單的介紹了各個檢視的屬性和方法。如果想要知道相容性或者更多,請至文章底部參考連結處。

本文內容分為五大部分:

  • Window檢視屬性
    • innerHeight 和 innerWidth
    • outerHeight 和 outerWidth
    • pageXOffset 和 pageYOffset
    • screenX 和 screenY
  • Screen檢視屬性
    • availWidth 和a vailHeight
    • colorDepth
    • pixelDepth
    • width 和 height
  • 文件檢視(DocumentView)和元素檢視(ElementView)方法
    • document.elementFromPoint()
    • element.getBoundingClientRect()⭐滑動欄滾動的時候常用
    • document.getClientRects()
    • element.scrollIntoView()
  • 元素檢視屬性
    • clientHeight 和 clientWidth
    • clientLeft 和 clientTop
    • offsetWidth 和 offsetHeight
    • offsetLeft 和 offsetTop
    • offsetParent
    • scrollHeight 和 scrollWidth
    • scrollLeft 和 scrollTop
    • scrollLeftMax 和 scrollTopMa
  • 滑鼠位置
    • clientX 和 clientY
    • offsetX 和 offsetY
    • pageX 和 pageY
    • screenX 和 screenY
    • x 和 y

一、Window檢視屬性

innerHeight 屬性和 innerWidth 屬性:獲取window瀏覽器內部大小,也就是視口(viewport)大小

outerHeight 屬性和 outerWidth 屬性:表示整個瀏覽器窗體的大小

pageXOffset 屬性和 pageYOffset 屬性:表示整個頁面滾動的畫素值(水平方向的和垂直方向的)

screenX 屬性和 screenY 屬性:瀏覽器視窗在顯示器中的位置,screenX表示水平位置,screenY表示垂直位置

如下圖所示,紅色部分為覽器視窗,綠色部分為瀏覽器的視口(viewport)

二、Screen檢視屬性

availWidthavailHeight:顯示器可用寬高,不包括工作列之類的東西

colorDepth:顯示器的顏色深度

pixelDepth:該屬性基本上與colorDepth一樣

widthheight:表示顯示器螢幕的寬高。

三、文件檢視(DocumentView)和元素檢視(ElementView)方法

document.elementFromPoint():返回給定座標處所在的元素。

element.getBoundingClientRect():返回一個Object物件,該物件有6個屬性:top,lef,right,bottom,width,height,大小都是相對於文件檢視左上角計算而來。

document.getClientRects():返回元素的數個矩形區域,返回的結果是個物件列表,具有陣列特性。

element.scrollIntoView():讓元素滾動到可視區域(不屬於草案方法)

element.getBoundingClientRect()詳解

返回元素的大小及其相對於視口的位置。

當計算邊界矩形時,會考慮視口區域(或其他可滾動元素)內的滾動操作,也就是說,當滾動位置發生了改變,top和left屬性值就會隨之立即發生變化(因此,它們的值是相對於視口的,而不是絕對的)。如果你需要獲得相對於整個網頁左上角定位的屬性值,那麼只要給top、left屬性值加上當前的滾動位置(通過 window.scrollX 和 window.scrollY),這樣就可以獲取與當前的滾動位置無關的值。

四、元素檢視屬性

clientWidthclientHeight:內容區域的高度和寬度,包括padding大小,但是不包括邊框和滾動條

clientLeftclientTop:內容區域的左上角相對於整個元素左上角的位置(包括邊框)

offsetWidthoffsetHeight:整個元素的尺寸(包括邊框)

offsetLeftoffsetTop:表示相對於最近的祖先定位元素(CSS position 屬性不是static 的元素)的左右偏移值。

offsetParent:第一個祖定位元素(即用來計算上面的offsetLeft和offsetTop的元素)

scrollWidthscrollHeight:表示整個內容區域的寬高,包括隱藏的部分。如果元素沒有隱藏的部分,則相關的值應該等用於clientWidth和clientHeight。當你向下滾動滾動條的時候,scrollHeight應該等用於scrollTop + clientHeight。

scrollLeftscrollTop:表示元素滾動的畫素大小。可讀可寫。

未脫離文件流:offsetLeft:父級元素margin+父級元素padding+父級元素border+自己margin

脫離文件流:offsetLeft:和父級元素沒關係

style.width僅能返回以style方式定義的內部樣式表的width屬性值。

clientWidth 和 clientHeight屬性會將獲取的值四捨五入取整數。 如果你需要小數結果, 請使用 element.getBoundingClientRect()
又因為使用element.getBoundingClientRect()只能獲取元素的width / height,但是這個值是 offsetWidth / offsetHeight ,包括邊框的長度,所以不能獲取clientWidth / clientHeight

五、滑鼠位置

clientXclientY:相對於window,為滑鼠相對於window的偏移。在iphone上,這對值返回的位置就等同於下面要提到的pageX/Y

offsetXoffsetY:表示滑鼠相對於當前被點選元素padding box的左上偏移值

pageXpageY:為滑鼠相對於document的座標

screenXscreenY:滑鼠相對於顯示器螢幕的偏移座標。

xy:相當於clientX/clientY。

參考資料

MDN Window物件

MDN Element物件

MDN HTMLElement

張鑫旭-CSSOM檢視模式(CSSOM View Module)相關整理

相關文章