首頁 >web前端 >js教程 >js中不同的height, top的區別比較_基礎知識

js中不同的height, top的區別比較_基礎知識

WBOY
WBOY原創
2016-05-16 15:38:061361瀏覽

每次看到js中的clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就頭大,根本分不清這幾種的區別,然而碰到這些已經不值一兩次了,然後每次都要查看各自的區別,才能決定要使用哪一個。

本篇主要以chrome為準,可能各個瀏覽器之間還是有一些區別,但很多自己還未真正遇到過,還不是很清楚,等以後碰到了類似的兼容性問題,再記錄到這裡,這次就chrome瀏覽器中各個屬性的區別做個記錄,以方便以後的查看

一 clientHeight,offsetHeight,scrollHeight的差別

  clientHeight在各個瀏覽器中基本上是一樣的,一致認為是內容可視區域的高度,也就是說頁面瀏覽器中可以看到內容的這個區域的高度,不包括滾動條,不包括margin,但包括padding,也就是說實際的clientHeight = 當前物件視覺區域的高度padding值,如下圖所示clientHeight = 物件視覺區域高度(300) 上下padding值(20) = 320

在不同瀏覽器都實用的javascript方案:

var w= document.documentElement.clientWidth || document.body.clientWidth;
var h= document.documentElement.clientHeight || document.body.clientHeight;

  offsetHeight = 目前物件的高度 捲軸 borde值 padding值,上圖中目前物件的高度和視覺區域高度是相同的,所以offsetHeight = 300 padding(20px ) border(10px)  = 330

        scrollHeight是網頁內容的實際高度,最小值就是clientHeight,也就是說可以是跟clientHeight相等的,但我們假設這樣一個情形,如下碼所示,父div高度是300px,子div高度是500px,這時候就會形成捲軸,此時父div的結構圖如下:

父div的的scrollHeight 就應該是scrollHeight = 500px padding值

因為此時產生了捲軸,此時父div的可視區域高度為283,當前物件高度也就是父div的高度為300,因此

clientHeight = 283px padding值(20px) = 303px

offsetHeight = 父div的高度(300px) padding值(20px) 邊框(10px) = 330px

<div id="parent" style="padding:10px;border:5px red solid;height:300px;width:200px;overflow:auto">
  <div style="height:500px;width:400px"></div>
</div>

二 clientTop,offsetTop,scrollTop的差別

clientTop的理解可以參考clientHeight,clientHeight的計算方式是目前視覺區域的高度 加上 padding值,那麼clientTop可以理解為目前視覺區域到上一層元素的距離。

 如上圖所示,clientTop就是5px,大部分情況下,clientTop都是這個border值。

offsetTop是目前物件到body元素的距離,它的計算方式相對複雜,先從上圖理解,目前物件指的是border邊框內的區域,所以計算offsetTop要從目前物件的margin開始,計算公式如下offsetTop = 當前物件的margin-top 當前物件所有上級元素的margin-top 當前物件所有上級元素的border-top,需要注意的是offsetTop是不能進行直接賦值的,只能透過這樣的計算方式得到。

scrollTop是目前物件的最頂端到目前物件在目前視窗顯示的範圍內的頂邊的距離.即是在出現了縱向滾動條的情況下,滾動條拉動的距離。

以上就是js中不同的height、 top的差別對比,希望對大家的學習有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn