Javascript獲取頁面元素的絕對(duì)位置實(shí)現(xiàn)
一、概念
絕對(duì)位置:網(wǎng)頁元素的左上角相對(duì)于整張網(wǎng)頁左上角的坐標(biāo)
相對(duì)位置:相對(duì)于瀏覽器窗口左上角的坐標(biāo)
二、獲取方法
1、每個(gè)元素都有offsetTop和offsetLeft屬性,表示該元素的左上角與父容器(offsetParent對(duì)象)左上角的距離。
2、每個(gè)元素都有offsetParent屬性。offsetParent屬性返回一個(gè)對(duì)象的引用,這個(gè)對(duì)象是距離調(diào)用offsetParent的元素最近的(在包含層次中最靠近的),并且是已進(jìn)行過CSS定位的容器元素。 如果這個(gè)容器元素未進(jìn)行CSS定位, 則offsetParent屬性的取值為根元素(在標(biāo)準(zhǔn)兼容模式下為html元素;在怪異呈現(xiàn)模式下為body元素)的引用。
當(dāng)容器元素的style.display 被設(shè)置為 "none"時(shí)(譯
注:IE和Opera除外),offsetParent屬性 返回 null 。
所以,只需要循環(huán)取得頁面元素的offsetParent,并逐步累加offsetTop和offsetLeft,就可以得到該元素的絕對(duì)坐標(biāo)。
三、代碼
function getElementAbsPos(e)
{
var t = e.offsetTop;
var l = e.offsetLeft;
while(e = e.offsetParent)
{
t += e.offsetTop;
l += e.offsetLeft;
}
return {left:l,top:t};
}四、問題
由于在iframe中,offsetParent對(duì)象未必等于父容器(同樣的,還有表格),所以通過getElementAbsPos函數(shù)得到并不是頁面元素的絕對(duì)位置,如下圖所示:
下面給出一個(gè)在iframe中正確獲取頁面元素的絕對(duì)位置的代碼:
/**
* @param e 頁面元素
* @param arrParentid 頁面元素e所在的iframe的數(shù)組
* @param isID 參數(shù)arrParentid中是iframe的id還是object
*/
function getElementAbsPos(e,arrParentid,isID)
{
var t = e.offsetTop;
var l = e.offsetLeft;
while(e = e.offsetParent)
{
t += e.offsetTop;
l += e.offsetLeft;
}
if(arguments.length >= 2)
{
for(var i=0; i<arrParentid.length; i++)
{
e = (isID==true) ? top.document.getElementById(arrParentid[i]) : arrParentid[i];
t += e.offsetTop;
l += e.offsetLeft;
while(e = e.offsetParent)
{
t += e.offsetTop;
l += e.offsetLeft;
}
}
}
return {left:l,top:t};
}
以上就是Javascript獲取頁面元素的絕對(duì)位置實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Javascript元素絕對(duì)位置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)省市聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
js密碼強(qiáng)度實(shí)時(shí)檢測(cè)代碼
這篇文章主要為大家詳細(xì)介紹了js密碼強(qiáng)度實(shí)時(shí)檢測(cè)代碼,密碼強(qiáng)度的判斷, 在注冊(cè)網(wǎng)站用戶的時(shí)候, 是一個(gè)必須要做的事情,如何實(shí)現(xiàn)js密碼強(qiáng)度檢測(cè),感興趣的小伙伴們可以參考一下2016-03-03
JavaScript中object和Object的區(qū)別(詳解)
下面小編就為大家?guī)硪黄狫avaScript中object和Object的區(qū)別(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
基于JavaScript實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
javascript實(shí)現(xiàn)簡(jiǎn)易聊天室
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)易聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
JS實(shí)現(xiàn)動(dòng)態(tài)星空背景效果
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)動(dòng)態(tài)星空背景效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

