在学习offset的相关属性前,必须明确指出offsetHeight/Width、offsetTop/offsetLeft等返回的都是只读的并且以数字的形式返回像素值(例如,返回12,而不是'12px')。
定位父元素:指在CSS中某一元素domElement[position:relative/absolute]所相对定位的元素。
1、offsetParent
对于offsetParent来讲,最重要的是能够知道 domElement.offsetParent 指向的是哪个元素。然而对于这一点不同的浏览器之间有一些微妙的差异。
a、domElement设置了position:relative/absolute属性:
domElement.offsetParent指向的是该元素的定位父元素。
但也有一个bug,见一下代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>RainMan</title>
<styletype="text/css">
#target{position:relative;}
</style>
<scripttype="text/javascript">
window.onload=function(){
vartarget=document.getElementById('target');
alert(target.offsetParent==document.documentElement); //IE中指向<html>元素
alert(target.offsetParent==document.body); //FF、Safari等指向<body>元素
};
</script>
</head>
<body>
<divid="outer"class="test">
<divid="inner">
<divid="target"class="test">Target<br/>rainman</div>
</div>
</div>
</body>
</html>
b、domElement没有设置position:relative/absolute,即static:
这一点所有的浏览器基本相同,domElement的offsetParent指向的是离domElement最近的拥有position:relative/absolute属性的父级元素。若不存在,则指向 <body>元素。但这种情况也有例外,如果domElement是<td>则 offsetparent 指向<table>
c、关于offsetParent的实例:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>RainMan</title>
<styletype="text/css">
#outer{position:absolute;}
</style>
<scripttype="text/javascript">
window.onload=function(){
vartarget=document.getElementById('target');
varouter=document.getElementById('outer');
alert(target.offsetParent==outer); //true
};
</script>
</head>
<body>
<divid="outer"class="test">
<divid="inner">
<divid="target"class="test">Target<br/>rainman</div>
</div>
</div>
</body>
</html>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>RainMan</title>
<styletype="text/css">
</style>
<scripttype="text/javascript">
window.onload=function(){
vartarget=document.getElementById('target');
alert(target.offsetParent==document.body); //true
};
</script>
</head>
<body>
<divid="outer"class="test">
<divid="inner">
<divid="target"class="test">Target<br/>rainman</div>
</div>
</div>
</body>
</html>
2、offsetLeft/Top
offsetLeft: 该元素左border的左边缘 到 该元素的offsetParent的左border内边缘的水平距离。
offsetTop:该元素的上border的上边缘 到 该元素的offsetParent的上border内边缘的垂直距离。
代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>RainMan</title>
<styletype="text/css">
*{margin:0px;padding:0px;}
.test{
padding:5px;
margin:10px;
color:#fff;
border:7pxsolid#000;
background-color:#CC66FF;
}
#target{
position:absolute;
left:3px;
top:9px;
width:100px;
height:100px;
}
#outer{
position:relative;
width:300px;
height:300px;
}
</style>
<scripttype="text/javascript">
window.onload=function(){
vartarget=document.getElementById('target');
alert(target.offsetLeft); //13=margin-10px+left-3px
};
</script>
</head>
<body>
<divid="outer"class="test">
<divid="inner">
<divid="target"class="test">Target<br/>rainman</div>
</div>
</div>
</body>
</html>
3、offsetWidth/offsetHeight
给出元素在页面中占据的宽度和高度的总计。注意:把元素的边框和滚动条计算在内。
offsetWidth = border-left-width + padding-left + width + padding-right + border-right-width;
offsetHeight = border-top-width + padding-top + height + padding-bottom + border-bottom-width;
4、相关应用
a、获得一个元素的实际宽度和高度,例如:一个自适应高度的段落,往往可以通过获得该元素CSS层叠后的最终高度【见下代码】,但是这种方法在IE中有时返回的是auto,所以使用一个元素的offsetWidth/offsetHeight是比较理想的方法。
function getStyle(elem,type){
var typeface='';
if(elem.currentStyle)
typeface=elem.currentStyle[type];
elseif(window.getComputedStyle)
typeface=window.getComputedStyle(elem,null)[type];
returntypeface;
}
获得一个元素位置的可移植的方法:在窗口中的位置
function getX(elem){
var x=0;
while(elem){
x=x+elem.offsetLeft;
elem=elem.offsetParent;
}
return x;
}
function getY(elem){
var y=0;
while(elem){
y=y+elem.offsetTop;
elem=elem.offsetParent;
}
return y;
}
转载自:http://tech.ddvip.com/web/javascript/index.html
分享到:
相关推荐
'left' : m.cont.offsetLeft + m.cont.offsetWidth + 10 + 'px', //放大框的位置为原始图像的右方远10px 'top' : m.cont.offsetTop + 'px' }) var borderWid = m.cont.getElementsByTagName('div')[0]....
一开始的需求只是表头部分在滚动时能一直固定在头部,那关键要实现的就是让tr能定位。 首先想到的方法是给tr设置relative,用ie6/7测试以下代码: Code <!DOCTYPE ...
return { Top: offsetTop, Left: offsetLeft, Width: offsetWidth, Height: offsetHeight } } 如果理解了的话就会觉得其实原理挺简单的,不过要想出来还是要一定创意才行,为想出这个方法的人致敬! 【切割预览】...
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; var parentEl=what.offsetParent; while (parentEl!=null){ totaloffset=(offsettype=="left")? totaloffset+parentEl....
代码如下: //取得元素x坐标 function pageX(elem) { return elem.offsetParent?(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft; } //取得元素y坐标 function pageY(elem) { return elem.offsetParent?...
JavaScript中提供获取HTML元素位置的...那么如何得到一个HTML元素的绝对位置呢,可以用以下函数: 代码如下: //获取元素的纵坐标 function getTop(e){ var offset=e.offsetTop; if(e.offsetParent!=null) offset+=ge
代码如下: // 找到子元素在父元素中的相对位置 function getElementTop(element){ var el = (typeof element == “string”) ? document.getElementById(element) : element; if (el[removed] === null || el.style...
因需要定位某个HTML元素(例如:div)距离页顶的高度,想用offsetTop来取值,结果却发现CSS中如果使用了float:left;之类的写法后,竟然会导致取到的值不一样。 没有使用float:left;取的到值是正常值200; <!DOCTYPE...
#yuantu { float:left;} #hidd { border:1px #cccccc solid; overflow:hidden; position:absolute;} #ceshi { background:#FFFF99; width:100%; height:200px; border:1px #ccc solid;} --> </style> </head> ...
clientHeight,只读 clientHeight可以用公式 CSS height + CSS padding – 水平滚动条的高度 (如果存在) 来计算。...一个元素顶部边框的宽度(以像素表示)。嗯。。就只是border-top-width 类似的属性还有一
JS获取元素的offsetTop,offsetLeft等属性 obj.clientWidth //获取元素的宽度 obj.clientHeight //元素的高度 obj.offsetLeft //元素相对于父元素的left obj.offsetTop //元素相对于父元素的top obj.offsetWidth //...
代码如下: //获取坐标位置 function getpos(e) { var t=e.offsetTop; var l=e.offsetLeft; var height=e.offsetHeight; while(e=e.offsetParent) { t+=e.offsetTop; l+=e.offsetLeft; } } 假设 obj 为某个 HTML 控件...
在阅读本文之前,请先看一看第一篇文章Javascript拖拽系列文章1之offsetParent属性,因为循序渐进是一个很好的习惯,值得提倡。好了,看看我们今天的内容吧。 首先让我们先看一看element.offsetLeft属性。 支持的...
本文实例为大家分享了javascript实现放大镜功能的具体代码,供大家参考,具体内容如下 描述:当鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置, 使放大镜的移动方向与大图的水平和垂直方向相反 如何设计 ...
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 event.clientX 相对文档的水平座标 event.clientY 相对文档的垂直座标 event.offsetX 相对容器的水平坐标 event.offsetY 相对容器...
做了这么久web开发,凡是涉及用js操作dom元素位置、测量dom元素大小时就心虚,因为js整整提供了二十几个属性对dom元素的位置、大小进行操作。比如:clientTop、offsetTop、scrollTop、clientWidth、offsetWidth、...
示例conf:[{“” columns“:4,” margins“:16,//第一和最后一列前后的像素//这些装订线像空白一样工作://如果列之间的距离为32px,则装订线为16”装订线“:16,” from“:0,//像素的断点开始// //可选值//...
offsetTop和offsetLeft 这两个属性,IE 、Opera和Firefox对它俩的解释存在差异: IE5.0+ 、Opera8.0+: offsetTop和offsetLeft 都是相对父级元素 Firefox1.06: offsetTop和offsetLeft 都是相对于body元素 ...
ele.offsetParent返回的是ele元素最近的并且是定位过(relative,absolute)的父元素,如果没有父元素或者是父元素中没有一个是定位过的,返回值就是body元素 ele.offsetLeft和ele.offsetTop取值问题,分多种情况: ...