DOM——元素大小 DOM——元素大小 DOM中沒有規定如何確定頁面中與元素的大小,IE率先映入了一些屬性來確定頁面中元素的大小,以便開發人員使用,目前,所有主要的瀏覽器都已經支持這些屬性了。 1.偏移量(單位為像素) 首先介紹的屬性涉及偏移量,包括元素在屏幕上占用的所有可見的空間。元素的可見大小由 ...
DOM——元素大小 DOM中沒有規定如何確定頁面中與元素的大小,IE率先映入了一些屬性來確定頁面中元素的大小,以便開發人員使用,目前,所有主要的瀏覽器都已經支持這些屬性了。 1.偏移量(單位為像素) 首先介紹的屬性涉及偏移量,包括元素在屏幕上占用的所有可見的空間。元素的可見大小由其高度、寬度決定,包括所有內邊距、滾動條和邊框大小(註意,不包括外邊距)。通過以下4個屬性可以取得元素的偏移量。 offsetParent:獲取元素的最近的具有定位屬性(absolute或者relative)的父級元素。如果都沒有則返回body offsetHeight:元素在垂直方向上占用的空間大小。包括元素的高度、(可見的)水平滾動條的高度、上邊框高度和下邊框高度。 offsetWidth:元素在水平方向上占用的空間大小。包括元素的寬度、(可見的)垂直滾動條的寬度、左邊框寬度號右邊框寬度。 offsetLeft:元素的左外邊框至父元素的左內邊框之間的像素距離。 offsetTop:元素的上外邊框至父元素的上內邊框之間的像素距離。 當然,要想知道某個元素在整個頁面上的偏移量,將該元素及其所有祖先元素的offsetLeft和offsetTop對應相加,直至根元素,就可以得到結果,下麵是相對於頁面的offsetLeft值(offsetTop獲取方式一樣):
<style type="text/css"> *{margin:0;padding:0;} #fu{width:100px;height:100px;background:red;margin:100px;padding:20px;} #fu .zi{width:20px;height:20px;background:black;} </style> <div id="fu"> <div class="zi"></div> </div> <script type="text/javascript"> var oZi = document.querySelector(".zi"); function getElementLeft(element){ var elementLeft = element.offsetLeft; var fu = element.offsetParent; while(fu != null){ elementLeft += fu.offsetLeft; fu = fu.offsetParent; } return elementLeft; } console.log("offsetLeft值為:" + getElementLeft(oZi) + "px"); </script>【註】所有偏移量屬性都是只讀的,而且每次訪問它們都需要重新計算。因此,應該儘量避免重覆訪問這些屬性;如果需要重覆使用某些屬性的值,可以將它們保存在局部變數中,以提高性能。 2.客戶區大小(單位為像素) 元素的客戶區大小,指的是元素內容及其內邊距所占據的空間大小。有關客戶區大小的屬性有兩個:clientWidth和clientHeight。 clientWidth:元素內容區寬度加上左右內邊距寬度 clientHeight:元素內容區高度加上上下內邊距高度 從字面上看,客戶區大小就是元素內部的空間大小,因此滾動條占用的空間不計算在內,最常用到這些屬性的情況就是:確定瀏覽器視口大小的時候,要確定瀏覽器視口大小,可以使用document.documentElement或document.body的clientWidth和clientHeight。 【註】與偏移量相似,客戶區大小也是只讀的,也是每次訪問都要重新計算的。 3.滾動大小(單位為像素) 滾動大小指的是包含滾動內容的元素的大小。有些元素(例如<html>元素),即使沒有執行任何代碼也能自動的添加滾動條:但另外一些元素,則需要通過CSS的overflow屬性進行設置才能滾動。以下4個與滾動大小相關的屬性。 scrollHeight:元素內容的實際總高度 scrollWidth:元素內容實際總寬度 scrollLeft:被隱藏的內容區域左側的像素數。通過設置這個屬性可以改變元素的滾動的位置 scrollTop:被隱藏的內容區域上方的像素數。通過設置這個屬性可以改變元素的滾動位置 scrollWidth和scrollHeight主要用於確定元素內容的實際大小,scrollLeft/scrollTop:滾動條最頂端和視窗中可見內容的最頂端之間的距離。所以,帶有垂直滾動條的頁面總高度就是document.documentElement.scrollHeight 在確定文檔的總高度時(包括基於視口的最小高度時),必須取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值,才能保證在跨瀏覽器的環境下得到精確的結果,比如:
var docHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight); var docWidth = Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);通過scrollLeft和scrollTop屬性既可以確定元素當前滾動狀態,也可以設置元素的滾動位置。在元素尚未滾動時,這兩個屬性的值都等於0. 總覽圖: