坐標計算中的offset编整,client捐名,和scroll

<h3 id="前言">前言</h3>其實,我所有文章都是一邊寫一邊學的闹击,文章思路上基本上就是我自己的學習感悟過程,我喜歡通過寫文章來揭露自己認知上的缺失成艘,審判自己對知識點掌握程度赏半。offset,client和scroll 這4個關(guān)于坐標計算的東西淆两,說真的断箫,我雖然有用過,但還是不能完全清楚它們本質(zhì)和區(qū)別秋冰,當要用起來的時候自然就只能上網(wǎng)查了仲义。所以庫這東西,私底下還是少用的好剑勾,便利了開發(fā)埃撵,但基礎(chǔ)的東西還是容易忘記的。
<h3 id="offset">offset</h3>offset 的意思就是“偏移”虽另。偏移暂刘,在字面上看是有一定含義的,一個東西他原來有一個位置捂刺,但是由于外力或其他關(guān)系谣拣,位置發(fā)生了變化,前后位置信息變化就可以看作是 偏移族展。在頁面上來說森缠,offset 有5個東西需要知道的,分別是:offsetParent仪缸、offsetWidth贵涵、offsetHeight、offsetTop、offsetLeft独悴。

<h4 id="offsetWidth和offsetHeight">offsetWidth和offsetHeight</h4>offsetWidth和offsetHeight基本就是同一個概念例书,很好理解,分別描述了一個元素的絕對寬度和絕對高度刻炒,不包括因 overflow 而導致未顯示的部分决采,也就是其實際占據(jù)的寬度(高度),整型坟奥,單位像素树瞭。用一條計算公式就可以理解清楚:
offsetWidth = border-left-width + padding-left + width + padding-right + border-right-width
offsetHeight = border-top-width + padding-top + height + padding-bottom + border-bottom-width
<h4 id="offsetParent">offsetParent</h4>offsetParent 是一個比較重要的概念,任何元素的自身偏移量都是基于它的offsetParent而言的爱谁。offsetParent 盡管帶了parent 一詞晒喷,并它不等同于元素的父元素。元素的offsetParent屬性返回一個對象的引用访敌,這個對象是距離調(diào)用offsetParent的元素最近的(在包含層次中最靠近的)凉敲,并且是已進行過CSS定位的容器元素。如果這個容器元素未進行CSS定位, 則offsetParent屬性的取值為根元素的引用寺旺。舉個例子

<body>
  <div class="d1">
    <div class="d2"></div>
  </div>
</body>
// 在沒有css定位時爷抓,div.d2 的 offsetParent 是body,相關(guān)計算也是在body和div.d2間進行阻塑。
<style>
  .d1{ position: relative; }
</style>
<body>
  <div class="d1">
    <div class="d2"></div>
  </div>
</body>
// div.d1進行了定位蓝撇,div.d2 的 offsetParent 是div.d1,相關(guān)計算也是在div.d1和div.d2間進行陈莽。

注意:body節(jié)點的offsetParent為null渤昌!
<h4 id="offsetLeft和offsetTop">offsetLeft和offsetTop</h4>重點來了,offsetLeft和offsetTop是我們經(jīng)常會用到的概念走搁,用于計算頁面元素的位置坐標独柑。
obj.offsetLeft 指 obj 相對于html版面或由 offsetParent 屬性指定的父坐標的計算左側(cè)位置,整型私植,單位像素群嗤。
obj.offsetTop 指 obj 相對于html版面或由 offsetParent 屬性指定的父坐標的計算上側(cè)位置,整型兵琳,單位像素狂秘。

實際情況下,當obj.offsetParent不是body時是比較好計算的躯肌,直接計算obj和obj.offsetParent的頁面舉例即可者春,計算公式是:
offsetLeft = offsetParent的padding-left + 中間元素的offsetLeft之和 + obj的margin-left
offsetHeight = offsetParent的padding-top + 中間元素的offsetTop之和 + obj的margin-top
但是,當obj.offsetParent為body或者為null時(就是說obj是body)清女,計算往往就開始變得不一樣钱烟,不一樣的地方在與obj.offsetParent與計算點是沒有關(guān)系的。從上面我們基本可以知道,offsetLeft(offsetHeight)就是從 html版面或由 offsetParent(前面的描述還是正確的拴袭,重點在“或”字)的padding box(盒計算模型的一種)左上角到obj border box左上角的距離读第。下面介紹一下幾種特別一些的情況

  • 當obj.offsetParent為body 且 body沒有設(shè)置css定位時,計算是從html版面的padding box左上角開始計算的
  • 當obj.offsetParent為body 且 body設(shè)置了css定位時拥刻,計算是從body的padding box左上角開始計算的
  • 不會出現(xiàn)從html版面的margin box左上角開始計算的情況怜瞒,也不建議對html元素設(shè)置邊距一類的樣式

<h3 id="scroll">scroll</h3>頁面上的滾動計算還是比較簡單的,scroll一類有4個屬性:scrollHeight般哼、scrollWidth吴汪、scrollLeft和scrollTop。

  • obj.scrollHeight獲取obj的滾動高度蒸眠,如果obj沒有縱向滾動條漾橙,則獲取對象的實際高度
  • obj.scrollWidth獲取obj的滾動高度,如果obj沒有縱向滾動條楞卡,則獲取對象的實際高度
  • obj.scrollLeft獲取或設(shè)置obj的橫向滾動條的滾動距離霜运,如果obj沒有橫向滾動條,則返回0蒋腮;對沒有出現(xiàn)滾動條的obj設(shè)置scrollLeft值是無效的觉渴,它始終為0
  • obj.scrollTop獲取或設(shè)置obj的縱向滾動條的滾動距離,如果obj沒有縱向滾動條徽惋,則返回0;對沒有出現(xiàn)滾動條的obj設(shè)置scrollTop值是無效的座韵,它始終為0
  • 當obj為body或html险绘,且無滾動條時,scrollHeight和scrollWidth就等于版面(瀏覽器窗口)的可見大小值
  • window對象沒有上述的4個屬性誉碴,但是有scrollX和scrollY宦棺,意思和scrollLeft、scrollTop一致黔帕。window對象還有一個scrollTo(x,y)方法代咸,讓頁面滾動到指定的坐標處。

<h3 id="client">client</h3>client意思是“客戶(端)”成黄,然而和坐標計算沒太大的聯(lián)系呐芥。client一般都是指obj的content box可見部分的大小,不包含padding奋岁、border和滾動條思瘟。

  • clientHeight, clientWidth這兩個屬性大體上顯示了元素內(nèi)容的象素高度和寬度
  • clientLeft,clientTop這兩個返回的是元素周圍邊框的厚度,如果不指定一個邊框或者不定位改元素,他的值就是0。clientLeft 返回對象的offsetLeft屬性值和到當前窗口左邊的真實值之間的距離闻伶。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滨攻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌光绕,老刑警劉巖女嘲,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诞帐,居然都是意外死亡欣尼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門景埃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒至,“玉大人,你說我怎么就攤上這事谷徙【軉” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵完慧,是天一觀的道長谋旦。 經(jīng)常有香客問我,道長屈尼,這世上最難降的妖魔是什么册着? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮脾歧,結(jié)果婚禮上甲捏,老公的妹妹穿的比我還像新娘。我一直安慰自己鞭执,他們只是感情好司顿,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兄纺,像睡著了一般大溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上估脆,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天钦奋,我揣著相機與錄音,去河邊找鬼疙赠。 笑死付材,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的圃阳。 我是一名探鬼主播伞租,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼限佩!你這毒婦竟也來了葵诈?” 一聲冷哼從身側(cè)響起裸弦,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎作喘,沒想到半個月后理疙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡泞坦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年窖贤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贰锁。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡赃梧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豌熄,到底是詐尸還是另有隱情授嘀,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布锣险,位于F島的核電站蹄皱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芯肤。R本人自食惡果不足惜巷折,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崖咨。 院中可真熱鬧锻拘,春花似錦、人聲如沸击蹲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽际邻。三九已至,卻和暖如春芍阎,著一層夾襖步出監(jiān)牢的瞬間世曾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工谴咸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留轮听,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓岭佳,卻偏偏與公主長得像血巍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子珊随,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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