offsetLeft包括自己的margin和offsetParent的padding而left则不包括这两个
同时offsetLeft不包括offsetParent的border
所以通过:
function getPosition(o)
{
var rObj={left:0,top:0};
while(o!==document.body)
{
rObj.left+=o.offsetLeft;
rObj.top+=o.offsetTop;
o=o.offsetParent;
}
return rObj;
}
获取的属性相对于实际的位置,少了几个offsetParent的border
所以正确的为:
function getPosition(o)
{
var iLeft=0,iTop=0,iBorder;
while(o!=document.body)
{
iBorder = parseInt(o.offsetParent.currentStyle.borderWidth,10);//但是ff没有currentStyle属性
iBorder = iBorder?iBorder:0;
iLeft += o.offsetLeft+iBorder;
iTop += o.offsetTop+iBorder;
o = o.offsetParent;
}
return {"left":iLeft,"top":iTop};
}
clientLeft似乎相当于border的大小,但不设置border的话body居然有默认的clientLeft为2,其他标签为0
posted on 2007-10-26 14:17
汪杰 阅读(554)
评论(1) 编辑 收藏 引用 所属分类:
divandcss