獲取任意Html元素與body之間的偏移距離 offsetTop、offsetLeft (For:IE5+ FF1 )[
更新時(shí)間:2006年12月22日 00:00:00 作者:
問題:
如何取到頁面中任意某個(gè)Html元素與body元素之間的偏移距離?
offsetTop和offsetLeft 這兩個(gè)屬性,IE 、Opera和Firefox對(duì)它倆的解釋存在差異:
IE5.0+ 、Opera8.0+: offsetTop和offsetLeft 都是相對(duì)父級(jí)元素
Firefox1.06: offsetTop和offsetLeft 都是相對(duì)于body元素
因此:
(1)在FF下直接使用offsetTop和offsetLeft,就可以取到頁面中任意某個(gè)Html元素與body元素之間的偏移距離;
(2)在IE、Opera下則比較麻煩:
需要首先取到該Html元素與body元素之間所有Html元素,計(jì)算各自的offsetTop和offsetLeft,然后再累加。
即:從該Html元素開始,遍歷至body,在遍歷的過程中,如果某個(gè)HTML元素的CSS設(shè)置了borderWidth的話,則borderWidth不是算在offsetTop和offsetLeft內(nèi)的--因此在遍歷的過程中,還需要累加上:
obj.currentStyle.borderLeftWidth、obj.currentStyle.borderTopWidth
下面這段測(cè)試代碼已經(jīng)解決上述問題,兼容IE5、FF1,但在Opera8下無效
實(shí)例代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<head>
<title> 代碼實(shí)例:獲取任意Html元素與body之間的偏移距離 offsetTop、offsetLeft </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<meta name="author" content="楓巖,CNLei.y.l@gmail.com">
<style type="text/css" media="all">
body,p {margin:0;padding:0;font-size:12px;}
body {float:left;width:100%;}
ul,ul li {margin:0;padding:0;list-style:none;padding:0;}
ul li input {border:1px solid #ccc;}
#Bd {
background:#FFE8D9;
float:left;
padding:20px;
border:10px solid #f90;/*該值在IE下還是取不到*/
width:100%;
}
#BS {
padding:20px;
float:left;
background:#58CB64;
}
#BS ul {border:20px solid #DDF1D8;}
#BM {
margin-top:100px;
float:right;
width:300px;
background:#fff;
}
</style>
<script type="text/javascript">
var w3c=(document.getElementById)? true:false;
var agt=navigator.userAgent.toLowerCase();
var ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) && (agt.indexOf("omniweb") == -1));
var ie5=(w3c && ie)? true : false;
var ns6=(w3c && (navigator.appName=="Netscape"))? true: false;
var op8=(navigator.userAgent.toLowerCase().indexOf("opera")==-1)? false:true;
function Obj(o){
return document.getElementById(o)?document.getElementById(o):o;
}
function GetXYWH(o){
var nLt=0;
var nTp=0;
var offsetParent = o;
while (offsetParent!=null && offsetParent!=document.body) {
nLt+=offsetParent.offsetLeft;
nTp+=offsetParent.offsetTop;
if(!ns6){
parseInt(offsetParent.currentStyle.borderLeftWidth)>0?nLt+=parseInt(offsetParent.currentStyle.borderLeftWidth):"";
parseInt(offsetParent.currentStyle.borderTopWidth)>0?nTp+=parseInt(offsetParent.currentStyle.borderTopWidth):"";
}
offsetParent=offsetParent.offsetParent;
//alert(offsetParent.tagName);
}
alert("ID:"+o.id+"\n\nL:"+nLt+" T:"+nTp+"\nW:"+o.offsetWidth+" H:"+o.offsetHeight);
}
</script>
</head>
<body>
<p style="height:100px;margin:0;padding:0;background:#00f;color:#fff;line-height:100px;text-align:center;">此色塊高:100px;</p>
<div id="Bd">
<div id="BS">
<ul>
<li><input type="text" value="無法取到橙黃色的邊框線寬度(border:10px solid #f90;)" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(Obj('BM'));" onclick="GetXYWH(Obj('BM'));" size="60" /></li>
</ul>
</div><!--BS-->
<div id="BM" onclick="GetXYWH(this);">
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
</div><!--BM-->
</div>
</body>
</html>
如何取到頁面中任意某個(gè)Html元素與body元素之間的偏移距離?
offsetTop和offsetLeft 這兩個(gè)屬性,IE 、Opera和Firefox對(duì)它倆的解釋存在差異:
IE5.0+ 、Opera8.0+: offsetTop和offsetLeft 都是相對(duì)父級(jí)元素
Firefox1.06: offsetTop和offsetLeft 都是相對(duì)于body元素
因此:
(1)在FF下直接使用offsetTop和offsetLeft,就可以取到頁面中任意某個(gè)Html元素與body元素之間的偏移距離;
(2)在IE、Opera下則比較麻煩:
需要首先取到該Html元素與body元素之間所有Html元素,計(jì)算各自的offsetTop和offsetLeft,然后再累加。
即:從該Html元素開始,遍歷至body,在遍歷的過程中,如果某個(gè)HTML元素的CSS設(shè)置了borderWidth的話,則borderWidth不是算在offsetTop和offsetLeft內(nèi)的--因此在遍歷的過程中,還需要累加上:
obj.currentStyle.borderLeftWidth、obj.currentStyle.borderTopWidth
下面這段測(cè)試代碼已經(jīng)解決上述問題,兼容IE5、FF1,但在Opera8下無效
實(shí)例代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<head>
<title> 代碼實(shí)例:獲取任意Html元素與body之間的偏移距離 offsetTop、offsetLeft </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<meta name="author" content="楓巖,CNLei.y.l@gmail.com">
<style type="text/css" media="all">
body,p {margin:0;padding:0;font-size:12px;}
body {float:left;width:100%;}
ul,ul li {margin:0;padding:0;list-style:none;padding:0;}
ul li input {border:1px solid #ccc;}
#Bd {
background:#FFE8D9;
float:left;
padding:20px;
border:10px solid #f90;/*該值在IE下還是取不到*/
width:100%;
}
#BS {
padding:20px;
float:left;
background:#58CB64;
}
#BS ul {border:20px solid #DDF1D8;}
#BM {
margin-top:100px;
float:right;
width:300px;
background:#fff;
}
</style>
<script type="text/javascript">
var w3c=(document.getElementById)? true:false;
var agt=navigator.userAgent.toLowerCase();
var ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) && (agt.indexOf("omniweb") == -1));
var ie5=(w3c && ie)? true : false;
var ns6=(w3c && (navigator.appName=="Netscape"))? true: false;
var op8=(navigator.userAgent.toLowerCase().indexOf("opera")==-1)? false:true;
function Obj(o){
return document.getElementById(o)?document.getElementById(o):o;
}
function GetXYWH(o){
var nLt=0;
var nTp=0;
var offsetParent = o;
while (offsetParent!=null && offsetParent!=document.body) {
nLt+=offsetParent.offsetLeft;
nTp+=offsetParent.offsetTop;
if(!ns6){
parseInt(offsetParent.currentStyle.borderLeftWidth)>0?nLt+=parseInt(offsetParent.currentStyle.borderLeftWidth):"";
parseInt(offsetParent.currentStyle.borderTopWidth)>0?nTp+=parseInt(offsetParent.currentStyle.borderTopWidth):"";
}
offsetParent=offsetParent.offsetParent;
//alert(offsetParent.tagName);
}
alert("ID:"+o.id+"\n\nL:"+nLt+" T:"+nTp+"\nW:"+o.offsetWidth+" H:"+o.offsetHeight);
}
</script>
</head>
<body>
<p style="height:100px;margin:0;padding:0;background:#00f;color:#fff;line-height:100px;text-align:center;">此色塊高:100px;</p>
<div id="Bd">
<div id="BS">
<ul>
<li><input type="text" value="無法取到橙黃色的邊框線寬度(border:10px solid #f90;)" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(this);" onclick="GetXYWH(this);" size="60" /></li>
<li><input type="text" value="GetXYWH(Obj('BM'));" onclick="GetXYWH(Obj('BM'));" size="60" /></li>
</ul>
</div><!--BS-->
<div id="BM" onclick="GetXYWH(this);">
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
<p>測(cè)試</p>
</div><!--BM-->
</div>
</body>
</html>
您可能感興趣的文章:
- 簡(jiǎn)單談?wù)刼ffsetleft、offsetTop和offsetParent
- JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等屬性學(xué)習(xí)筆記
- 獲取offsetTop和offsetLeft值的js代碼(兼容)
- js中top、clientTop、scrollTop、offsetTop的區(qū)別 文字詳細(xì)說明版
- Javascript拖拽系列文章2之offsetLeft、offsetTop、offsetWidth、offsetHeight屬性
- 在IE下:float屬性會(huì)影響offsetTop的取值
- top、clientTop、scrollTop、offsetTop
- offsetTop用法詳解
相關(guān)文章
JavaScript+canvas實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript+canvas實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05PixiJS學(xué)習(xí)之Sprite類的使用詳解
Sprite 直譯為 “精靈”,是游戲開發(fā)中常見的術(shù)語,就是將一個(gè)角色的多個(gè)動(dòng)作放到一個(gè)圖片里,通過裁剪局部區(qū)域得到當(dāng)前的角色狀態(tài)圖。本文主要介紹了PixiJS中Sprite類的使用,需要的可以參考一下2023-02-02JavaScript實(shí)現(xiàn)繼承的4種方法總結(jié)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)繼承的4種方法總結(jié),本文給出了原型鏈繼承、構(gòu)造繼承、實(shí)例繼承、拷貝繼承等實(shí)現(xiàn)JS繼承的方法,需要的朋友可以參考下2014-10-10JS對(duì)img進(jìn)行操作(換圖片/切圖/輪換/停止)
JS對(duì)img進(jìn)行操作包括:換圖片/切圖/輪換/停止輪換等等,在本文將逐一實(shí)現(xiàn),感興趣的朋友可以參考下哈,希望對(duì)你學(xué)習(xí)js知識(shí)有所幫助2013-04-04