1.offsetLeft/offsetTop
在页面任一元素的offsetLeft总是找到离其最近的已经定位的父元素或祖先元素定位,如果没有,就根据根节点body定位,然后获取其left值。
2.offset().left/offset().top
返回或设置匹配元素相对于文档的偏移(位置)。 无论元素的父元素或祖先元素的position属性是什么,总是计算相对于文档的位置。
示例:
- 1
- 1
- 1
- 2
- 3
- 1
- 2
- 3
========================================================
offset()
函数用于设置或返回当前匹配元素相对于当前文档的偏移,也就是相对于当前文档的坐标。该函数只对可见元素有效。
该函数返回一个坐标对象(Object),该对象有一个left
属性和top
属性。属性值均为数字,它们都以像素(px)为单位。
与position()不同的是:offset()
返回的是相对于当前文档的坐标,position()
返回的是相对于其定位的祖辈元素的坐标。
该函数属于jQuery
对象(实例)。
语法
jQuery 1.2 新增该函数。
jQueryObject.offset( [ coordinates ] )
注意:
1、如果省略了coordinates
参数,则表示获取偏移位置;如果指定了该参数,则表示设置偏移位置。2、offset()
函数的"设置"操作针对的是当前jQuery对象所匹配的每一个元素;"读取"操作只针对第一个匹配的元素。
参数
参数 | 描述 |
---|---|
coordinates | 可选/Object类型用于设置的坐标对象(应具有left和top属性)。 |
jQuery 1.4 新增支持:offset()
支持通过传入coordinates
参数来设置匹配元素的坐标。
在1.4之前,offset()
只用于获取第一个匹配元素的坐标。从1.4开始,offset()
还可用于设置所有匹配元素的坐标。参数coordinates
即表示需要设置的坐标值。
参数coordinates
应该是一个具备left
和top
属性的对象。
参数coordinates
还可以是函数,则offset()
将根据匹配的所有元素遍历执行该函数,函数中的this
将指向对应的DOM元素。
offset()
还会为函数传入两个参数:第一个参数就是当前元素在匹配元素中的索引,第二个参数就是该元素当前的坐标对象。函数的返回值就是需要设置的坐标对象。
返回值
offset()
函数的返回值为Object类型,返回值的类型取决于offset()
函数当前执行的是"设置"操作还是"读取"操作。
如果offset()
函数执行的是"设置"操作,则返回当前jQuery对象本身;如果是"读取"操作,则返回第一个匹配元素相对于当前文档的坐标对象。
如果当前jQuery对象匹配多个元素,返回坐标时,offset()
函数只以其中第一个匹配的元素为准。如果没有匹配的元素,则返回undefined
。
offset()
中的坐标参考系是以当前文档的左上角为原点(0,0),向右为正,向下为正。
示例&说明
以下面这段HTML代码为例:
<br>
<br>
<p id="n1">CodePlayer</p>
<p id="n2" class="meta" left="20" top="50" >专注于编程开发技术分享</p>
<p id="n3" class="meta" left="20" top="100">http://www.365mini.com</p>
以下jQuery示例代码用于演示offset()
函数的具体用法:
var $n1 = $("#n1"); // 输出n1的当前坐标 var coord = $n1.offset(); alert( "当前坐标:(" + coord.left + ", " + coord.top + ")" ); // 当前坐标:(8, 60) // 设置n1的坐标为(0, 0) var offset = $n1.offset( {top: 0, left: 0}); var $meta_p = $("p.meta"); // 将所有带类名meta的p元素相对当前位置进行left和top属性指定的偏移。 $meta_p.offset( function(index, coord){ var $me = $(this); var left = $me.attr("left"), top = $me.attr("top"); left = isNaN( left ) ? 0 : parseInt(left, 10); top = isNaN( top ) ? 0 : parseInt(top, 10); return { "left": coord.left + left, "top": coord.top + top }; } );
上述代码执行后的完整html代码如下(格式未作任何调整):
<br>
<br>
<p id="n1" style="position: relative; top: -60px; left: -8px;">CodePlayer</p>
<p id="n2" class="meta" left="20" top="50" style="position: relative; top: 50px; left: 20px;">专注于编程开发技术分享</p>
<p id="n3" class="meta" left="20" top="100" style="position: relative; top: 100px; left: 20px;">http://www.365mini.com</p>
</body>