最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

三劍客:offset、client和scroll還傻傻分不清?

 更新時間:2020年12月04日 10:36:39   作者:沐源山  
這篇文章主要給大家介紹了三劍客:offset,client和scroll的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在學習前端的過程中,我們經(jīng)常會碰到offset, client與scroll,所以我就把它們稱作為‘三劍客'。

01  offset - 偏移量

定義:元素在屏幕上占用的所有的可見的空間。

元素可見的大小由其高度、寬度決定,包括所有內(nèi)邊距,滾動條和邊框大小四個屬性

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:

元素的左外邊框至包含元素的左內(nèi)邊框之間的像素距離

offsetTop

元素的上外邊框至包含元素的上內(nèi)邊框之間的像素距離

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

當我們?nèi)バ薷哪骋粋€父元素的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)指的是元素內(nèi)容及其內(nèi)邊距所占距的空間大小

clientWidth:

元素內(nèi)容區(qū)寬度 + 左右內(nèi)邊距寬度

clientHeight:

元素內(nèi)容區(qū)高度 + 山下內(nèi)邊距高度

我們可以用來獲取瀏覽器視口大小代碼如下

 function getView() {
 return {
  w: document.body.clientWidth || document.documentElement.clientWidth,
  h: document.body.clientHeight || document.documentElement.clientHeight
 }
 }

03 scroll 滾動條的大小

我們一般看到的默認滾動條的寬度是17px;

滾動大?。褐傅氖前瑵L動內(nèi)容的元素的大小

scroll

scrollHeight: 在沒有滾動條的情況下,元素內(nèi)容的總高度

scrollWidth:在沒有滾動條的情況下,元素內(nèi)容的總寬度

HTML部分

<body>
 <div class="grand">
 <div class="father">
  <div class="son"></div>
 </div>
 </div>
</body>

JS打印:

console.log(son.scrollHeight);

此時返回的結果是120  在沒有滾動條的情況下(子元素內(nèi)容未超出的情況)

內(nèi)容超出的情況

HTML部分

<div class="grand">
  <div class="father">
   <div class="son">
(備注:以下內(nèi)容為亂打測試內(nèi)容)
    四大皆空來得及啊電視機卡十九大達科技的薩克
    可視對講阿克蘇進度款垃圾的卡死了的健康垃圾
    肯德基卡薩階段啦科技的卡拉膠打開鏈接的垃圾
    打卡大抗裂砂漿打卡機打卡機的刷卡機的拉家?guī)?
    口殺戮空間打卡機的阿克蘇交大老師就打開打開
   </div>
  </div>
 </div>

JS部分:

console.log(son.scrollHeight); // 409 

//在子元素內(nèi)容超出的情況下 

scrollLeft: 被隱藏在內(nèi)容區(qū)域左側的像素值,通過設置這個屬性可以改變元素的滾動位置

scrollTop:被隱藏在內(nèi)容區(qū)域上方的像素值,通過這個屬性可以改變元素的滾動位置

scrollWidth和scrollHeight主要用于確定元素內(nèi)容的實際大小

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內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

白沙| 文水县| 禹州市| 从化市| 中西区| 温泉县| 泸水县| 磐石市| 汉川市| 奇台县| 和田县| 永顺县| 香河县| 洪洞县| 双桥区| 周至县| 宾川县| 清原| 晋江市| 巴塘县| 临汾市| 洞头县| 昌图县| 卫辉市| 临西县| 达孜县| 威海市| 新蔡县| 商都县| 新河县| 湘乡市| 泗阳县| 惠东县| 河南省| 长乐市| 汾阳市| 柳江县| 新巴尔虎右旗| 福建省| 巴楚县| 赤峰市|