js中不同的height, top的區(qū)別對(duì)比
每次看到j(luò)s中的 clientHeight(clientTop), offsetHeight(offsetTop),scrollHeight(scrollTop)就頭大,根本分不清這幾種的區(qū)別,然而碰到這些已經(jīng)不 值一兩次了,然后每次都要查看一下各自的區(qū)別,才能決定使用哪個(gè)。
本篇主要以chrome為準(zhǔn),可能各個(gè)瀏覽器之間還是有一些區(qū)別,但很多自己還未真正遇到過(guò),還不是很清楚,等以后碰到了類似的兼容性問(wèn)題,再記錄到這里,這次就chrome瀏覽器中各個(gè)屬性的區(qū)別做個(gè)記錄,以方便以后的查看
一 clientHeight,offsetHeight,scrollHeight的區(qū)別
clientHeight在各個(gè)瀏覽器中基本是一樣的,一致認(rèn)為是內(nèi)容可視區(qū)域的高度,也就是說(shuō)頁(yè)面瀏覽器中可以看到內(nèi)容的這個(gè)區(qū)域的高度,不包括滾動(dòng)條,不包括margin,但包括padding,也就是說(shuō)實(shí)際的clientHeight = 當(dāng)前對(duì)象可視區(qū)域的高度 + padding值,如下圖所示 clientHeight = 對(duì)象可視區(qū)域高度(300) + 上下padding值(20) = 320

在不同瀏覽器都實(shí)用的javascript方案:
var w= document.documentElement.clientWidth || document.body.clientWidth; var h= document.documentElement.clientHeight || document.body.clientHeight;
offsetHeight = 當(dāng)前對(duì)象的高度 + 滾動(dòng)條 + borde值 + padding值,上圖中當(dāng)前對(duì)象的高度和可視區(qū)域高度是一樣的,所以offsetHeight = 300 + padding(20px ) + border(10px) = 330
scrollHeight是網(wǎng)頁(yè)內(nèi)容的實(shí)際高度,最小值就是clientHeight,也就是說(shuō)可以是跟clientHeight相等的,但我們假設(shè)這樣一個(gè)情形,如下代碼所示,父div高度是300px,子div高度是500px,這時(shí)候就會(huì)形成滾動(dòng)條,此時(shí)父div的結(jié)構(gòu)圖如下:

父div的的scrollHeight 就應(yīng)該是scrollHeight = 500px + padding值
因?yàn)榇藭r(shí)產(chǎn)生了滾動(dòng)條,此時(shí)父div的可視區(qū)域高度為283,當(dāng)前對(duì)象高度也就是父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的區(qū)別
clientTop的理解可以參考clientHeight,clientHeight的的計(jì)算方式是當(dāng)前可視區(qū)域的高度 加上 padding值,那么clientTop就可以理解為當(dāng)前可視區(qū)域到上一級(jí)元素的距離。
如上圖所示,clientTop就是5px,大部分情況下,clientTop都是這個(gè)border值。
offsetTop是當(dāng)前對(duì)象到body元素的距離,它的計(jì)算方式相對(duì)復(fù)雜,先從上圖進(jìn)行理解,當(dāng)前對(duì)象指的是border邊框之內(nèi)的區(qū)域,所以計(jì)算offsetTop要從當(dāng)前對(duì)象的margin開始,計(jì)算公式如下 offsetTop = 當(dāng)前對(duì)象的margin-top + 當(dāng)前對(duì)象所有上級(jí)元素的margin-top + 當(dāng)前對(duì)象所有上級(jí)元素的border-top,需要注意的是offsetTop是不能進(jìn)行直接賦值的,只能通過(guò)這樣的計(jì)算方式得到。
scrollTop是當(dāng)前對(duì)象的最頂部到當(dāng)前對(duì)象在當(dāng)前窗口顯示的范圍內(nèi)的頂邊的距離.即是在出現(xiàn)了縱向滾動(dòng)條的情況下,滾動(dòng)條拉動(dòng)的距離。
以上就是js中不同的height、 top的區(qū)別對(duì)比,希望對(duì)大家的學(xué)習(xí)有所幫助。
- 原生js獲取left值和top值的三種方法
- js瀏覽器滾動(dòng)條卷去的高度scrolltop(實(shí)例講解)
- Javascript實(shí)現(xiàn)的StopWatch功能示例
- JavaScript限制在客戶區(qū)可見(jiàn)范圍的拖拽(解決scrollLeft和scrollTop的問(wèn)題)(2)
- js中scrollTop()方法和scroll()方法用法示例
- 深入淺析JavaScript中的scrollTop
- js+css實(shí)現(xiàn)回到頂部按鈕(back to top)
- 使用堆實(shí)現(xiàn)Top K算法(JS實(shí)現(xiàn))
- 解決js頁(yè)面滾動(dòng)效果scrollTop在FireFox與Chrome瀏覽器間的兼容問(wèn)題的方法
- javascript獲取圖片的top N主色值方法詳解
相關(guān)文章
Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法
本篇文章,小編將為大家介紹Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法,有需要的朋友可以參考一下2013-04-04
Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型轉(zhuǎn)換
JavaScript是一種無(wú)類型語(yǔ)言,但同時(shí)JavaScript提供了一種靈活的自動(dòng)類型轉(zhuǎn)換的處理方式?;疽?guī)則是,如果某個(gè)類型的值用于需要其他類型的值的環(huán)境中,JavaScript就自動(dòng)將這個(gè)值轉(zhuǎn)換成所需要的類型。2015-01-01
使用js聲明數(shù)組,對(duì)象在jsp頁(yè)面中(獲得ajax得到j(luò)son數(shù)據(jù))
使用js聲明數(shù)組,對(duì)象在jsp頁(yè)面中(獲得ajax得到j(luò)son數(shù)據(jù))。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-11-11
javascript 基礎(chǔ)篇1 什么是js 建立第一個(gè)js程序
javascript是很多東西的基礎(chǔ),比如jsp,ajax等,如果不會(huì)這么,那么學(xué)起這些來(lái)就比較麻煩,所以要先學(xué)好這個(gè),為將來(lái)的學(xué)習(xí)打好經(jīng)濟(jì)基礎(chǔ)2012-03-03
Javascript學(xué)習(xí)筆記之 函數(shù)篇(一) : 函數(shù)聲明和函數(shù)表達(dá)式
function 是 Javascript 中的第一類對(duì)象,這就意味著函數(shù)可以像其他值一樣被傳遞。一個(gè)最常見(jiàn)的用法就是將一個(gè)匿名函數(shù)作為回調(diào)函數(shù)傳遞到另外一個(gè)異步函數(shù)中。2014-06-06

