因为offsetTop 和 offsetLeft 都是相对于 offsetParent 内边距边界的,故offsetParent的意义十分重大。offsetParent的机制与css中包含块的概念十分相似但并不彻底一致,其不一致有时候是因为浏览器的不一样而致使的,例如:当元素为固定定位时(fixed),chrome浏览器的 offsetParent 值为 Null,而火狐的则为 body 元素。总结规律以下:css
自己定位为fixed | 自己定位非fiexd | |||
offsetParent | 火狐 | 非火狐 | 父级无定位 | 父级有定位 |
body | null | body | 有定位的父级 |
offsetLeft 是一个只读属性,返回当前元素左上角相对于 offsetParent 节点的左边界偏移的像素值。 html
offsetTop 为只读属性,它返回当前元素相对于其 offsetParent 元素的顶部的距离。node
function getPointAb(node){ //while循环叠加offsetParent的offsetTop和offsetLeft var x =0; var y = 0; while(node){ x+=node.offsetLeft; y+=node.offsetTop; node = node.offsetParent; } return {x:x,y:y}; }
L = document.documentElement.scrollLeft||document.body.scrollLeft;
T = document.documentElement.scrollTop||document.body.scrollTop;
//boder margin会影响这个函数的取值 function getPointRe(node){ //while循环叠加offsetParent的offsetTop和offsetLeft var x =0; var y = 0; while(node){ x+=node.offsetLeft; y+=node.offsetTop; node = node.offsetParent; } var L = document.documentElement.scrollLeft||document.body.scrollLeft; var T = document.documentElement.scrollTop||document.body.scrollTop; return {x:x-L,y:y-T}; }
tips:在ie10及ie10如下,根标签的clientWidth和offsetWidth,统一被指定为视口的宽度。chrome