獲取高度能夠能夠省略window
javascript
window.innerWidth
,經過字面意思咱們知道這是一個內部的寬度,若是有滾動條,則包含滾動條的寬度window.innerHeight
,表示內部可用的高度,若是有滾動條,則包含滾動條的高度window.outWidth
,整個窗口的寬度window.outHeight
,整個窗口的高度此外還有window.screen下的寬度,主要是與屏幕間的距離html
幾大差別java
屬性名 | 描述 | 備註 |
---|---|---|
window.innerHeight |
瀏覽器的窗口高度,若是有水平滾動條則包含滾動條的高度 | 只讀屬性,IE8及如下不支持 |
document.documentElement.clientHeight |
不包括滾動條,包含html 元素邊框 |
|
document.body.clientHeight |
不包含滾動條,不包含html 和body 的邊框和滾動條 |
首先來看一張各類尺寸的圖地址git
document
下一共有三種相關的寬高github
client
相關的寬高offset
相關的寬高scroll
相關的寬高offsetHeigth
表示 VISIBLE content & padding + border + scrollbar,也就是內容的可見區域加上padding和border和滾動條(若是有)clientHeight
表示VISIBLE content & padding,也就是可見區域的高度加上paddingscrollHeight
表示ENTIRE content & padding(visible or hidden),也就是整個內容的高度加上padding(可見或者隱藏)當咱們給div設置寬度和高度時,咱們其實設置的是content area的寬高,同理padding和border也是同樣,因此元素的總高度爲content+margin+paddingsegmentfault
offsetHeight
offsetHeight
表示元素在HTML頁面當中所佔據的高度,當使用開發者工具,移到div上,所顯示的寬高便是實際佔用的高度,包括如下幾部分:瀏覽器
margin
因爲是隔離元素的一部分,所以不被包含。工具
clientHeight
clientHeight
表示元素可見課件內容的高度,包括如下幾部分:post
scrollHeight
scrollHeight
表示可見/隱藏元素的總高度,包括如下幾部分:學習
下面的屬性均爲只讀屬性,返回當前元素相對scrollParent
的距離
通常指當前元素的CSS邊框相對於其offsetParent的X和Y座標
當前元素及其全部內容的高度,寬度。
離當前元素最近的定位元素,定位屬性包括relative,absolute等,標準模式下爲html
,怪異模式下爲body
let height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; let width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
當offsetParent
爲body
的時候,能夠經過el.offsetTop
肯定距離文檔頂部的高度,可使用下面的方法來判斷
function getTop(el) { let top = el.offsetTop; let currentParent = el.offsetParent; while (currentParent != null) { top += currentParent.offsetTop; currentParent = currentParent.offsetParent; } return top; }
兼容方案
window.pageYOffset
是window.scrollY
的別名scrollTop
表示距離scrollParent
被捲去的距離,scrollheight
是元素的整個高度,包括overflow
隱藏的部分var x = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft var y = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
是否滾動到底部
// 文檔高度 - 滾動的高度 === 視口高度 ele.scrollHeight - ele.scrollTop === ele.clientHeight; // 文檔高度,包括padding,不包括border ele.scrollHeight = document.documentElement.scrollheight; // 滾動的高度 ele.scrollTop = Math.round(document.documentElement.scrollTop); // 視口高度 ele.clientHeight = document.documentElement.clientHeight;
須要獲取的高度
var clientY = window.innerheight || document.documentElement.clientheight || document.body.clientHeight; // 兼容方案 var supportPageOffset = window.pageXOffset !== undefined; var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft; var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
判斷圖片是否出如今視窗裏面,主要有三個高度
document.body.scrollTop
window.innerHeight
offsetTop
兩個常見的滾動斷定
document.body.scrollTop > window.innerHeight
window.scrollY + window.innerHeight > document.body.scrollHeight
function isBottomVisible () { var scrollY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; var clientY = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var pageY = document.documentElement.scrollHeight || document.body.scrollHeight; // console.log(scrollY,clientY,pageY); return Math.round(scrollY) + clientY === pageY },
// 滾動到指定位置 window.scrollTo(0,100); window.scroll(0,100); // 計算垂直滾動條的距離 if (document.body.clientWidth !== window.innerWidth) { var scrollHeight = window.innerWidth - document.body.clientWidth; } // 滾到頂部 if (window.scrollY) { window.scroll(0,0); }