2020-01-03 offset

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

</head>

<body>

</body>

<script>

// offsetParent? 獲取他的父參照物(不一定是父元素);

// 父參照物和它的父元素沒(méi)有必然的聯(lián)系,父參照物查找:最外層元素是所有后代元素的父參照物,而基于position:relative/absolute/fixed可以讓元素脫離文檔流(一個(gè)新的平面,)從而改變?cè)氐母竻⒄刮?/p>

//document.body.offsetParent=null;

// offsetTop? ? 距離其父參照物的上偏移

// offsetLeft? ? 距離服父參照物的左偏移(當(dāng)前元素的外邊框到父參照物的里邊框)

/*

offset 封裝當(dāng)前元素距離body的左/上偏移(不論其父參照物是誰(shuí))

@params

curEle:current element? 當(dāng)前要操作的元素

@return

[Object] 包含上/左偏移的信息 => {top:xxx,left:xxx}

by sunlong on 2020/1/3

*/

? ? function offset(curEle) {

let par=curEle.offsetParent,

l=curEle.offsetLeft,

t=curEle.offsetTop;

// 兼容ie8瀏覽器

//存在父級(jí)參照物,而且沒(méi)有找到body

? ? ? ? while (par &&par.tagName!=='BODY'){

//在原有偏移的基礎(chǔ)上累加:父參照物的邊框,父參照物的偏移

? ? ? ? ? ? if (!/MSIE 8\.0/.test(navigator.userAgent)){

//在ie8中偏移值自己計(jì)算了,不需要我們加邊框的值

//navigator.userAgent獲取當(dāng)前瀏覽器的版本信息

? ? ? ? ? ? ? ? l+=par.clientLeft;

t+=par.clientTop;

}

l+=par.offsetLeft;

t+=par.offsetTop;

//繼續(xù)獲取上級(jí)參照物

? ? ? ? ? ? par=par.offsetParent;

return{

top:t,

left:l

? ? ? ? ? ? }

}

}

</script>

</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容