屬性
和方法
,讓咱們可以獲取到當前元素的樣式信息,例如:clientWidth
、offsetWidth
等共計
13
種,分三個系列,分別是:client
、offset
、scroll
。javascript
padding
)一、獲取當前頁面一屏幕(可視化)區域的寬高java
- 寬:let winW = document.documentElement.clientWidth || document.body.clientWidth;
- 高:let winH = document.documentElement.clientHeight || document.body.clientHeight;
- 注意:前面
documentElement
在低版本瀏覽器下不兼容
二、利用JS實現盒子居中瀏覽器
原理:(一屏幕的寬度-盒子的寬度)/2 === LEFTbash
box.clientLeft
獲取盒子左邊框的大小box.clientTop
獲取盒子上邊框的大小client
的基礎上加上 border
== 盒子自己的寬高client
一致)
父參照物查找:同一個平面中,最外層元素是全部後代元素的父參照物動畫
- 而基於
position:relative / absolute / fixed
可讓元素脫離文檔流(一個新的平面),從而改變元素的父參照物- 通俗來講,也就是:元素的父級參照物在默認狀況下都是body,若是給一個元素增長
position
屬性(absolute
,relative
、fixed
),會讓他全部子孫元素的父級參照物都指向當前這個元素
body
的左、上偏移量(不論其父參照物是誰)/* * offset:獲取當前元素距離BODY的左/上偏移(不論其父參照物是誰) * @params * curEle:current element當前要操做的元素 * @return * [object]包含上/左偏移的信息 => {top:xxx,left:xxx} */
function offset(curEle) {
let par = curEle.offsetParent,
l = curEle.offsetLeft,
t = curEle.offsetTop;
//存在父參照物,並且尚未找到BODY,BOBY的邊框不作考慮的狀況
while (par && par.tagName !== "BODY") {
//在原有偏移的基礎上累加:父參照物的邊框、父參照物的偏移
if (!/MSIE 8\.0/.test(navigator.userAgent)) {
//IE8中偏移值自已就算了邊框了,不須要咱們在加邊框的值 navigator.userAgent獲取當前瀏覽器的版本信息
l += par.clientLeft;
t += par.clientTop;
}
l += par.offsetLeft;
t += par.offsetTop;
//繼續獲取上級參照物
par = par.offsetParent;
}
return {
top: t,
left: l
};
}
複製代碼
function offset(curEle) {
let left = curEle.offsetLeft;
let top = curEle.offsetTop;
let parent = curEle.offsetParent;
// 上來第一步先獲取當前元素的偏移量和父級參照物
while (parent !== document.body) {
// 檢測一下當前元素的父級參照物是否是body,若是不是就累加上父級參照物的邊框的寬度和偏移量
left += parent.clientLeft + parent.offsetLeft;
top += parent.clinetTop + parent.offsetTop;
// 在獲取父級參照物的父級參照物,直到獲取到body爲止
parent = parent.offsetParent;
}
return {
left: left,
top:top
}
}
複製代碼
定義:ui
client
是同樣的PADDING
+ 真實內容的寬度/高度)注意:spa
在內容超出的狀況下code
- 1.不一樣瀏覽器獲取的結果不盡相同
- 2.設置
overflow
屬性值對最後的結果也會產生必定的影響
使用:regexp
拓展:cdn
獲取整個頁面真實的高度
- document.documentElement.scrollHeight || document.body.scrollHeight
scrollHeight
) - (一屏幕高度clientHeight
)利用邊界值:
- 一、快速定位到頂部:box.scrollTop=0;
- 二、快速定位到底部:box.scrollTop = box.scrollHeight-box.clientHeight
// 1.當瀏覽器滾動條滾動的時候,咱們進行驗證:捲去的高度超過兩屏,咱們讓#LINK顯示
function check() {
//winH:一屏幕高度 scrollT:捲去的高度
let winH = HTML.clientHeight,
scrollT = HTML.scrollTop;
LINK.style.display = scrollT >= winH * 2 ? 'block' : 'none';
}
window.onscroll = check;
// 2.點擊回到頂部
LINK.onclick = function () {
/* 讓按鈕隱藏 */
LINK.style.display = 'none';
//先禁止滾動事件觸發(由於在回到頂部的運動過程當中,若是事件一直在,會計算按鈕顯示隱藏的樣式,沒法讓按鈕隱藏)
window.onscroll = null;
/* 實現動畫 */
let step = 1000;
let timer = setInterval(() => {
//每一次獲取最新的SCROLL-TOP值,在現有的基礎上減去步長,讓其走一步
let curT = HTML.scrollTop;
if (curT === 0) {
//邊界判斷:已經回到頂部後,咱們清除定時器
clearInterval(timer);
//恢復滾動條滾動的監聽事件
window.onscroll = check;
return;
}
curT -= step;
HTML.scrollTop = curT;
}, 17);//13~17ms動畫兼容最好,IE最好用17
};
//利用定時器
//SET-INTERVAL:設置一個定時器(TIMER表明這個定時器),每間隔INTERVAL這麼久,就會把FUNCTUION執行一次...一直到手動清除定時器爲止
// let timer = setInterval([FUNCTUION], [INTERVAL]);
// clearInterval(timer);
複製代碼
IE6~8
瀏覽器中不兼容,須要基於currentStyle
來獲取:after/:before
null
或不寫CSSStyleDeclaration
這個類的實例(對象),包含了當前元素全部的樣式信息let styleObj = window.getComputedStyle([element],null);
styleObj["backgroundColor"];
styleObj.display;
複製代碼
getComputedStyle
一致,此方法用於IE6~8
瀏覽器因爲目前操做DOM逐漸被弱化,JS盒子模型逐漸被弱化