javascript的offset返咱、client、scroll的總結(jié)

client

clientHeight

這個屬性是只讀屬性牍鞠,對于沒有定義CSS或者內(nèi)聯(lián)布局盒子的元素為0咖摹,否則,它是元素內(nèi)部的高度(單位像素)难述,包含內(nèi)邊距萤晴,但不包括水平滾動條、邊框和外邊距胁后。
clientHeight 可以通過 CSS height + CSS padding - 水平滾動條高度 (如果存在)來計算店读。滾動條區(qū)域不能顯示內(nèi)容所以扣除。
盒子模型如下:


image.png

image.png

clientWidth

這個屬性是只讀屬性择同,對于沒有定義CSS或者內(nèi)聯(lián)布局盒子的元素為0两入,否則净宵,它是元素內(nèi)部的高度(單位像素)敲才,包含內(nèi)邊距,但不包括水平滾動條择葡、邊框和外邊距紧武。
clientHeight 可以通過 CSS height + CSS padding - 水平滾動條高度 (如果存在)來計算.


image.png

clientTop

一個元素頂部邊框的寬度(以像素表示)。不包括頂部外邊距(margin,outline,box-shadow)或內(nèi)邊距(padding)及是border敏储。clientTop 是只讀的阻星。


image.png

clientLeft

表示一個元素的左邊框的寬度,以像素表示已添。如果元素的文本方向是從右向左(RTL, right-to-left, direction: rtl)妥箕,并且由于內(nèi)容溢出導致左邊出現(xiàn)了一個垂直滾動條,則該屬性包括滾動條的寬度更舞。clientLeft 不包括左外邊距和左內(nèi)邊距畦幢。clientLeft 是只讀的。


image.png

其中滾動條的寬度為16px; clientLeft = border + scrollbarWidth;
當沒有滾動條的時候計算方式和clientTop;

offset

offsetHeight

HTMLElement.offsetHeight 是一個只讀屬性缆蝉,它返回該元素的像素高度宇葱,高度包含該元素的垂直內(nèi)邊距和邊框瘦真,且是一個整數(shù)。
通常黍瞧,元素的offsetHeight是一種元素CSS高度的衡量標準诸尽,包括元素的邊框、內(nèi)邊距和元素的水平滾動條(如果存在且渲染的話)印颤,不包含:before或:after等偽類元素的高度您机。
對于文檔的body對象,它包括代替元素的CSS高度線性總含量高年局。浮動元素的向下延伸內(nèi)容高度是被忽略的往产。


image.png

offsetHeight = border * 2 + padding * 2 + contentHeight + scrollbarWidth

offsetWidth

HTMLElement.offsetWidth 是一個只讀屬性,返回一個元素的布局寬度某宪。一個典型的(譯者注:各瀏覽器的offsetWidth可能有所不同)offsetWidth是測量包含元素的邊框(border)仿村、水平線上的內(nèi)邊距(padding)、豎直方向滾動條(scrollbar)(如果存在的話)兴喂、以及CSS設置的寬度(width)的值蔼囊。


image.png

offsetWidth = border * 2 + padding * 2 + contentWidth + scrollbarWidth

image.png

offsetTop

HTMLElement.offsetTop為只讀屬性,它返回當前元素相對于其offsetParent元素的頂部的距離衣迷。

image.png

對應css如下:


image.png

在該示例中 offsetTop = marginTop + top(100px)

offsetLeft

HTMLElement.offsetLeft 是一個只讀屬性畏鼓,返回當前元素左上角相對于 HTMLElement.offsetParent 節(jié)點的左邊界偏移的像素值。
對塊級元素來說壶谒,offsetTop云矫、offsetLeft、offsetWidth 及 offsetHeight 描述了元素相對于 offsetParent 的邊界框汗菜。
然而让禀,對于可被截斷到下一行的行內(nèi)元素(如 span),offsetTop 和 offsetLeft 描述的是第一個邊界框的位置(使用 Element.getClientRects() 來獲取其寬度和高度)陨界,而 offsetWidth 和 offsetHeight 描述的是邊界框的尺寸(使用 Element.getBoundingClientRect 來獲取其位置)巡揍。因此,使用 offsetLeft菌瘪、offsetTop腮敌、offsetWidth、offsetHeight 來對應 left俏扩、top糜工、width 和 height 的一個盒子將不會是文本容器 span 的盒子邊界。


image.png

在該示例中 offsetLeft = marginleft + left(100px)

scroll

scrollHeight

Element.scrollHeight 這個只讀屬性是一個元素內(nèi)容高度的度量录淡,包括由于溢出導致的視圖中不可見內(nèi)容捌木。
scrollHeight 的值等于該元素在不使用滾動條的情況下為了適應視口中所用內(nèi)容所需的最小高度。 沒有垂直滾動條的情況下赁咙,scrollHeight值與元素視圖填充所有內(nèi)容所需要的最小值clientHeight相同钮莲。包括元素的padding免钻,但不包括元素的border和margin。scrollHeight也包括 ::before 和 ::after這樣的偽元素崔拥。
代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>測試scrollHeight</title>
 <style>
   html,body,.parent{
     margin: 0;
   }
   .parent{
     height: 800px;
     width: 600px;
     padding: 20px;
     border: 1px solid red;
     overflow: auto;
     margin: 10px;
   }
   .parent::before{
     height: 100px;
     width: 100%;
     content: "before";
     background-color: #00a6e2;
     color: #fff;
     display: inline-block;
   }
   .parent::after{
     height: 100px;
     width: 100%;
     content: "after";
     background-color: #00a6e2;
     color: #fff;
     display: inline-block;
   }
   .box1{
     width: 100%;
     height: 900px;
     border: 10px solid red;
     padding: 20px;
     margin: 30px;
   }
   .parent::-webkit-scrollbar{
     width:16px;
     height:16px;
     background-color: #00a6e2;
   }
   .parent::-webkit-scrollbar-thumb
   {
     border-radius:10px;
     -webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);
     background-color:#555;
   }
 </style>
</head>
<body>
<div class="parent">
 <div class="box1"></div>
</div>
</body>
</html>


我們先看看box1的scrollHeight


image.png

其中box1的scrollHeight為940极舔,因為沒有滾動條scrollHeight = clientHeight = padding * 2 + contentHeight。
我們再看看parent的scrollHeight


image.png

scrollHeight = parent的padding(20 * 2) + 二個偽元素高度(200) + box1的高度(900 + 20 * 2 + 10 * 2 + 30 * 2) = 1260

scrollWidth

Element.scrollWidth 是只讀屬性链瓦,表示元素內(nèi)容的寬度拆魏,包括由于滾動而未顯示在屏幕中內(nèi)容
scrollWidth值等于元素在不使用水平滾動條的情況下適合視口中的所有內(nèi)容所需的最小寬度。 寬度的測量方式與clientWidth相同:它包含元素的內(nèi)邊距慈俯,但不包括邊框渤刃,外邊距或垂直滾動條(如果存在)。 它還可以包括偽元素的寬度贴膘,例如::before或::after卖子。 如果元素的內(nèi)容可以適合而不需要水平滾動條,則其scrollWidth等于clientWidth

image.png

當子元素的寬度超出父級元素的寬度的時候刑峡,子元素的margin-right丟失洋闽。所以不計算marginRight的寬度。
scrollWidth = parent.paddingLeft + (box1.padding + box1.border) * 2 + box1.contentWidth + box1.marginLeft

scrollTop

Element.scrollTop 屬性可以獲取或設置一個元素的內(nèi)容垂直滾動的像素數(shù)突梦。
一個元素的 scrollTop 值是這個元素的頂部到視口可見內(nèi)容(的頂部)的距離的度量诫舅。當一個元素的內(nèi)容沒有產(chǎn)生垂直方向的滾動條,那么它的 scrollTop 值為0宫患。

  • 如果一個元素不能被滾動(例如刊懈,它沒有溢出,或者這個元素有一個"non-scrollable"屬性)娃闲, scrollTop將被設置為0虚汛。
  • 設置scrollTop的值小于0,scrollTop 被設為0
  • 如果設置了超出這個容器可滾動的值, scrollTop 會被設為最大值.

可以設置元素的scrollTop為負數(shù), 滾動到頂部畜吊。設置scrollTop一個超大值滾動到底部泽疆。
scrollTop的最大值 = scrollHeight - clientHeight 可以用該表達式判斷元素是否滾動到底部。


image.png

scrollLeft

Element.scrollLeft 屬性可以讀取或設置元素滾動條到元素左邊的距離玲献。
通scrollTop相似。

  • 如果元素不能滾動(比如:元素沒有溢出)梯浪,那么scrollLeft 的值是0捌年。
  • 如果給scrollLeft 設置的值小于0,那么scrollLeft 的值將變?yōu)?挂洛。
  • 如果給scrollLeft 設置的值大于元素內(nèi)容最大寬度礼预,那么scrollLeft 的值將被設為元素最大寬度。

可以設置元素的scrollLeft為負數(shù), 滾動到左側(cè)虏劲。設置scrollLeft一個超大值滾動到右側(cè)托酸。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末褒颈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子励堡,更是在濱河造成了極大的恐慌谷丸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件应结,死亡現(xiàn)場離奇詭異刨疼,居然都是意外死亡,警方通過查閱死者的電腦和手機鹅龄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門揩慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扮休,你說我怎么就攤上這事迎卤。” “怎么了玷坠?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵止吐,是天一觀的道長。 經(jīng)常有香客問我侨糟,道長碍扔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任秕重,我火速辦了婚禮不同,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溶耘。我一直安慰自己二拐,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布凳兵。 她就那樣靜靜地躺著百新,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庐扫。 梳的紋絲不亂的頭發(fā)上饭望,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音形庭,去河邊找鬼铅辞。 笑死,一個胖子當著我的面吹牛萨醒,可吹牛的內(nèi)容都是我干的斟珊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼富纸,長吁一口氣:“原來是場噩夢啊……” “哼囤踩!你這毒婦竟也來了旨椒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堵漱,失蹤者是張志新(化名)和其女友劉穎综慎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怔锌,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡寥粹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了埃元。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涝涤。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岛杀,靈堂內(nèi)的尸體忽然破棺而出阔拳,到底是詐尸還是另有隱情,我是刑警寧澤类嗤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布糊肠,位于F島的核電站,受9級特大地震影響遗锣,放射性物質(zhì)發(fā)生泄漏货裹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一精偿、第九天 我趴在偏房一處隱蔽的房頂上張望弧圆。 院中可真熱鬧,春花似錦笔咽、人聲如沸搔预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拯田。三九已至,卻和暖如春甩十,著一層夾襖步出監(jiān)牢的瞬間船庇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工枣氧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溢十,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓达吞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荒典。 傳聞我的和親對象是個殘疾皇子酪劫,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容