Javascript獲取頁面元素的絕對位置實(shí)現(xiàn)
一、概念
絕對位置:網(wǎng)頁元素的左上角相對于整張網(wǎng)頁左上角的坐標(biāo)
相對位置:相對于瀏覽器窗口左上角的坐標(biāo)
二、獲取方法
1、每個(gè)元素都有offsetTop和offsetLeft屬性,表示該元素的左上角與父容器(offsetParent對象)左上角的距離。
2、每個(gè)元素都有offsetParent屬性。offsetParent屬性返回一個(gè)對象的引用,這個(gè)對象是距離調(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,就可以得到該元素的絕對坐標(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對象未必等于父容器(同樣的,還有表格),所以通過getElementAbsPos函數(shù)得到并不是頁面元素的絕對位置,如下圖所示:
下面給出一個(gè)在iframe中正確獲取頁面元素的絕對位置的代碼:
/** * @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獲取頁面元素的絕對位置實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Javascript元素絕對位置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js實(shí)現(xiàn)點(diǎn)擊注冊按鈕開始讀秒倒計(jì)時(shí)的小例子
js實(shí)現(xiàn)點(diǎn)擊注冊按鈕開始讀秒倒計(jì)時(shí)的小例子,需要的朋友可以參考一下2013-05-05js動態(tài)實(shí)現(xiàn)表格添加和刪除操作
這篇文章主要為大家詳細(xì)介紹了js動態(tài)實(shí)現(xiàn)表格添加和刪除操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04淺析JS給原始數(shù)據(jù)類型加屬性和方法為什么不報(bào)錯
這篇文章主要想和大家一起探討一下JavaScript中給原始數(shù)據(jù)類型添加屬性和方法為什么不報(bào)錯,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-11-11微信小程序調(diào)用騰訊地圖API文檔JavaScript?SDK和WebService?API詳細(xì)解讀
本文介紹了如何使用騰訊位置服務(wù),包括申請開發(fā)者密鑰、獲取小程序APPID、下載地圖SDK、設(shè)置服務(wù)器域名白名單等步驟,詳細(xì)說明了如何在微信小程序中集成騰訊位置服務(wù),進(jìn)行地圖展示和周邊搜索等功能的實(shí)現(xiàn),同時(shí)提醒注意API的調(diào)用次數(shù)和權(quán)限限制,需要的朋友可以參考下2024-09-09js實(shí)現(xiàn)精確到秒的日期選擇器完整實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)精確到秒的日期選擇器,以完整實(shí)例形式分析了JavaScript日期選擇器的實(shí)現(xiàn)步驟與相關(guān)技巧,涉及JavaScript針對時(shí)間與日期的相關(guān)運(yùn)算,需要的朋友可以參考下2016-04-04