三劍客:offset、client和scroll還傻傻分不清?
在學習前端的過程中,我們經常會碰到offset, client與scroll,所以我就把它們稱作為‘三劍客'。
01 offset - 偏移量
定義:元素在屏幕上占用的所有的可見的空間。
元素可見的大小由其高度、寬度決定,包括所有內邊距,滾動條和邊框大小四個屬性
offset
css的樣式:
<style> .son { width: 100px; height: 100px; padding: 10px; border: 10px solid #ccc; } .father { width: 140px; height: 140px; padding: 10px; border: 10px solid black; } .grand { width: 180px; height: 180px; margin: 100px; padding: 10px; border: 10px solid orange; } </style>
HTML部分:
<div class="grand"> <div class="father"> <div class="son"></div> </div> </div>
offsetHeight:
元素正在垂直方向上占用的大小空間,px,元素的高度,水平滾動條的高度 + 上邊框高度
offsetWidth:
元素在垂直方向上占用的大小空間,px,元素的寬度,垂直滾動條的寬度,左右邊框的寬度
var grand = document.getElementsByClassName('grand')[0]; var father = document.getElementsByClassName('father')[0]; var son = document.getElementsByClassName('son')[0]; console.log(grand.offsetHeight); // 220 console.log(grand.offsetWidth); // 220
offsetWidth,offsetHeight
offsetLeft:
元素的左外邊框至包含元素的左內邊框之間的像素距離
offsetTop
元素的上外邊框至包含元素的上內邊框之間的像素距離
offsetParent:
offsetLeft與offsetTop屬性與包含元素有關,包含元素的引用保存在offsetParent屬性中
offsetParent屬性不一定與parentNode的值相等其實就是看看父元素們是否都有position:定位屬性
console.log(son.offsetParent); // <body></body> console.log(son.offsetLeft); // 148 // body的8pxmargin console.log(son.offsetTop); // 140
當我們去修改某一個父元素的position的時候發(fā)生了這樣的變化
grand.style.position = 'relative'; console.log(son.offsetParent); // grand作為了包含元素 console.log(son.offsetLeft); // 30 console.log(son.offsetTop); // 30
offsetLeft與offsetTop的值不一樣了
這樣我們就可以封裝成一個方法,一直到獲取最頂層的距離
function getOffset(ele) { var offset = { top: 0, left: 0 } while (ele.offsetParent) { offset.top += ele.offsetTop; offset.left += ele.offsetLeft; ele = ele.offsetParent; console.log(ele, offset); // grand {left: 138, top: 130} // body {top: 130, left: 138} } return offset; } console.log(getOffset(son)); // {top: 130, left: 138}
02 客戶區(qū) client
client
元素的客戶區(qū)大?。╟lient dimension)指的是元素內容及其內邊距所占距的空間大小
clientWidth:
元素內容區(qū)寬度 + 左右內邊距寬度
clientHeight:
元素內容區(qū)高度 + 山下內邊距高度
我們可以用來獲取瀏覽器視口大小代碼如下
function getView() { return { w: document.body.clientWidth || document.documentElement.clientWidth, h: document.body.clientHeight || document.documentElement.clientHeight } }
03 scroll 滾動條的大小
我們一般看到的默認滾動條的寬度是17px;
滾動大?。褐傅氖前瑵L動內容的元素的大小
scroll
scrollHeight: 在沒有滾動條的情況下,元素內容的總高度
scrollWidth:在沒有滾動條的情況下,元素內容的總寬度
HTML部分
<body> <div class="grand"> <div class="father"> <div class="son"></div> </div> </div> </body>
JS打?。?/p>
console.log(son.scrollHeight);
此時返回的結果是120 在沒有滾動條的情況下(子元素內容未超出的情況)
內容超出的情況
HTML部分
<div class="grand"> <div class="father"> <div class="son"> (備注:以下內容為亂打測試內容) 四大皆空來得及啊電視機卡十九大達科技的薩克 可視對講阿克蘇進度款垃圾的卡死了的健康垃圾 肯德基卡薩階段啦科技的卡拉膠打開鏈接的垃圾 打卡大抗裂砂漿打卡機打卡機的刷卡機的拉家?guī)? 口殺戮空間打卡機的阿克蘇交大老師就打開打開 </div> </div> </div>
JS部分:
console.log(son.scrollHeight); // 409 //在子元素內容超出的情況下
scrollLeft: 被隱藏在內容區(qū)域左側的像素值,通過設置這個屬性可以改變元素的滾動位置
scrollTop:被隱藏在內容區(qū)域上方的像素值,通過這個屬性可以改變元素的滾動位置
scrollWidth和scrollHeight主要用于確定元素內容的實際大小
var docHeight = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight); var docWidth = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth);
以上就是我們的‘三劍客'啦,不用再傻傻分不清啦!
參考資料:《高級語言程序設計》
到此這篇關于三劍客:offset,client和scroll的文章就介紹到這了,更多相關offset,client和scroll內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
微信小程序 連續(xù)旋轉動畫(this.animation.rotate)詳解
這篇文章主要介紹了微信小程序 連續(xù)旋轉動畫(this.animation.rotate)詳解的相關資料,需要的朋友可以參考下2017-04-04javascript中substring()、substr()、slice()的區(qū)別
在js中字符截取函數(shù)有常用的三個slice()、substring()、substr()了,下面我來給大家介紹slice()、substring()、substr()函數(shù)在字符截取時的一些用法與區(qū)別吧。2015-08-08