使用HTML元素的style.left,style.top,style.width,style.height以及width,height屬性,都
不能獲得元素的真正位置與大小,這些屬性取出來(lái)的都是原來(lái)的設(shè)置值,例如<table id="table1"
width="500">,那么通過(guò)document.getElementById("table1").width取出來(lái)的值永遠(yuǎn)都是500,
而不管這個(gè)表格是否已經(jīng)被撐大了;同時(shí),通過(guò)document.getElementById("table1").style.left獲得的值是空
的,因?yàn)闆](méi)有設(shè)置這個(gè)值。
要取得HTML元素的真正位置與大小,只能通過(guò)
offsetLeft,offsetTop,clientWidth,clientHeight,offsetWidth,offsetHeight屬
性,其中offsetLeft與offsetTop分別是當(dāng)前元素在父元素內(nèi)的相對(duì)左坐標(biāo)與相對(duì)頂坐標(biāo),要取得絕對(duì)坐標(biāo),還需要用到
offsetParent屬性,改屬性取得當(dāng)前元素的父元素。要取得絕對(duì)坐標(biāo),就必須依次獲得父元素的相對(duì)坐標(biāo),直到父元素為空,然后把所有相對(duì)坐標(biāo)加起
來(lái),得到當(dāng)前元素的絕對(duì)坐標(biāo)。
最常見的是日期選擇框,當(dāng)點(diǎn)擊按鈕時(shí)彈出日期選擇框總是在按鈕的旁邊,這個(gè)選擇框的坐標(biāo),就是根據(jù)按鈕的坐標(biāo)以及按鈕的offsetWidth,offsetHeight來(lái)取得的。
-----------------------------------------------------------------------------------------------------------------------------
HTMLElement.offsetLeft
HTMLElement.offsetTop
但
是需要注意的是,這兩個(gè)屬性所儲(chǔ)存的數(shù)值并不是該元素相對(duì)整個(gè)瀏覽器畫布的絕對(duì)位置,而是相對(duì)于其父元素位置的相對(duì)位置,也就是說(shuō)這兩個(gè)數(shù)值得到的是以其
父元素左上角為(0,0)點(diǎn)從而計(jì)算出的數(shù)值。那么如何得到一個(gè)HTML元素的絕對(duì)位置呢,前一陣找到的一個(gè)比較好的函數(shù),分享一下:
//獲取元素的縱坐標(biāo)
function getTop(e){
var offset=e.offsetTop;
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
return offset;
}
//獲取元素的橫坐標(biāo)
function getLeft(e){
var offset=e.offsetLeft;
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
return offset;
}
其
原理就是利用HTMLElement.offsetParent屬性,如果當(dāng)前元素的父元素不是空(null),則在原本的offsetTop基礎(chǔ)上加上
當(dāng)前的offsetTop,然后繼續(xù)獲取父元素的父元素的offsetTop,再將其加之,最終遞歸出該元素相對(duì)于整個(gè)瀏覽器畫布的縱坐標(biāo)。橫坐標(biāo)亦
然。
------------------------------------------------------------------------------------------------------------------------
<script type="text/javascript">
<!--
function GetElCoordinate(e)
{
var t = e.offsetTop;
var l = e.offsetLeft;
var w = e.offsetWidth;
var h = e.offsetHeight;
while (e = e.offsetParent)
{
t += e.offsetTop;
l += e.offsetLeft;
}
return {
top: t,
left: l,
width: w,
height: h,
bottom: t + h,
right: l + w
}
}
var o = GetElCoordinate(document.getElementById("text-div"));
document.getElementById("test-div").style.left = parseInt(o.left)+"px";
document.getElementById("test-div").style.top = parseInt(o.bottom)+"px";
//-->
</script>