主页 个人前端笔记 offsetLeft兼容浏览器的写法
admin
发表于2012-11-11 18:56:29    只看楼主 楼主
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
offsetLeft,offsetTop

取元素的位置需要一直递归到body元素为止,否则,经过验证只在chrome下兼容,firefox和ie不兼容

正确的表示法

var getLeft=function(obj){
    var offset=obj.offsetLeft;
    if(obj.offsetParent!=null)  offset +=getLeft(obj.offsetParent);
    return offset;
};


offsetParent属性返回一个对象的引用,
这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),
并且是已进行过CSS定位的容器元素。
 如果这个容器元素未进行CSS定位, 
则offsetParent属性的取值为根元素(在标准兼容模式下为html元素;
在怪异呈现模式下为body元素)的引用。 
当容器元素的style.display 被设置为 "none"时(译注:IE和Opera除外),offsetParent属性 返回 null 。
 
admin
发表于2012-11-11 18:56:59 1楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
offsetParent 测试代码1

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript" language="JavaScript">

function offset_init(){
var pElement = document.getElementById("sonObj");
parentObj = pElement.offsetParent;
alert(parentObj.tagName);
}

</script>
</head>
<body onload="offset_init()">
<div id="parent">
             <p id="sonObj">测试OffsetParent属性</p>
</div>
</body>
</html>

ie=>BODY
chrome=>BODY
firefox=>BODY

结论:当某个元素及其父元素都未进行CSS定位时,则这个元素的offsetParent属性的取值为根元素。
更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为Body元素。
(其实无论时标准兼容模式还是怪异模式,根元素都为Body元素)
 
admin
发表于2012-11-11 18:57:19 2楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
offsetParent 测试代码2

<div id="parent">   加上
<style>
  #parent{
   position:absolute;
   /*
      relative等等
    */
  }
</style>
测试结果
ie=>DIV
chrome=>DIV
firefox=>DIV
结论:当某个元素的父元素进行了CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为其父元素。更确切地说,这个元素的各种偏移量计算(offsetTop、offsetLeft等)的参照物为其父元素。
 
admin
发表于2012-11-11 18:57:36 3楼
头衔:  精益求精
注册时间: 2012-10-07
用户组: 日常管理组
发帖数:  502
金币数:  186
短消息
offsetParent 测试代码3

<h1 id="Grandfather">
<div id="parent">
<p id="sonObj">测试OffsetParent属性</p>
</div>
</h1>

代码中
#Grandfather  进行css定位,而#parent没有
测试结果
ie=>H1
chrome=>H1
firefox=>H1
结论:当某个元素及其父元素都未进行CSS定位时(absolute或者relative),则这个元素的offsetParent属性的取值为在DOM结构层次中距离其最近,并且已进行了CSS定位的元素。

回复人
回复内容

Powered BY YouYaX
个人自主开发论坛,从2010年10月份开发至今!

操作管理