欢迎来到福编程网,本站提供各种互联网专业知识!

获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[

发布时间:2006-12-22 作者: 来源:转载
问题:如何取到页面中任意某个Html元素与body元素之间的偏移距离?offsetTop和offsetLeft这两个属性,IE、Opera和Firefox对它俩的解释存在差异:IE5.0+、Opera8.0+:offsetTop和offsetLeft都是相对父级元素Firefox1.06:offsetTop和offsetLeft都是相对于body元
问题:
如何取到页面中任意某个Html元素与body元素之间的偏移距离?

offsetTop和offsetLeft这两个属性,IE、Opera和Firefox对它俩的解释存在差异:
IE5.0+、Opera8.0+:offsetTop和offsetLeft都是相对父级元素
Firefox1.06:offsetTop和offsetLeft都是相对于body元素

因此:
(1)在FF下直接使用offsetTop和offsetLeft,就可以取到页面中任意某个Html元素与body元素之间的偏移距离;
(2)在IE、Opera下则比较麻烦:
需要首先取到该Html元素与body元素之间所有Html元素,计算各自的offsetTop和offsetLeft,然后再累加。
即:从该Html元素开始,遍历至body,在遍历的过程中,如果某个HTML元素的CSS设置了borderWidth的话,则borderWidth不是算在offsetTop和offsetLeft内的--因此在遍历的过程中,还需要累加上:
obj.currentStyle.borderLeftWidth、obj.currentStyle.borderTopWidth

下面这段测试代码已经解决上述问题,兼容IE5、FF1,但在Opera8下无效

实例代码:




代码实例:获取任意Html元素与body之间的偏移距离offsetTop、offsetLeft



body,p{margin:0;padding:0;font-size:12px;}
body{float:left;width:100%;}
ul,ulli{margin:0;padding:0;list-style:none;padding:0;}
ulliinput{border:1pxsolid#ccc;}
#Bd{
background:#FFE8D9;
float:left;
padding:20px;
border:10pxsolid#f90;/*该值在IE下还是取不到*/
width:100%;
}
#BS{
padding:20px;
float:left;
background:#58CB64;
}
#BSul{border:20pxsolid#DDF1D8;}
#BM{
margin-top:100px;
float:right;
width:300px;
background:#fff;
}


varw3c=(document.getElementById)?true:false;
varagt=navigator.userAgent.toLowerCase();
varie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1)&&(agt.indexOf("omniweb")==-1));
varie5=(w3c&&ie)?true:false;
varns6=(w3c&&(navigator.appName=="Netscape"))?true:false;
varop8=(navigator.userAgent.toLowerCase().indexOf("opera")==-1)?false:true;

functionObj(o){
returndocument.getElementById(o)?document.getElementById(o):o;
}

functionGetXYWH(o){
varnLt=0;
varnTp=0;
varoffsetParent=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+"nnL:"+nLt+"T:"+nTp+"nW:"+o.offsetWidth+"H:"+o.offsetHeight);
}



此色块高:100px;













测试


测试


测试


测试


测试






相关推荐