当前位置: 首页 > 中文手册 > jQuery.offset() 函数详解

jQuery.offset() 函数详解

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应该是一个具备lefttop属性的对象

参数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>
100 4
我们认为: 用户的主要目的,是为了获取有用的信息,而不是来点击广告的。因此本站将竭力做好内容,并将广告和内容进行分离,确保所有广告不会影响到用户的正常阅读体验。用户仅凭个人意愿和兴趣爱好点击广告。
我们坚信:只有给用户带来价值,用户才会给我们以回报。
CodePlayer技术交流群1CodePlayer技术交流群1

帮朋友打一个硬广告:

P2P网贷系统(Java版本) 新年低价大促销,多年P2P技术积累,系统功能完善(可按需定制,可支持第三方存管、银行存管),架构稳定灵活、性能优异、二次开发快速简单。 另可提供二次开发、安装部署、售后维护、安全培训等一条龙服务。

外行看热闹,内行看门道。可以自信地认为,在系统设计上,比市面上的晓风、迪蒙、方维、绿麻雀、国融信、金和盛等P2P系统要好。
深圳地区支持自带技术人员现场考察源代码、了解主要技术架构,货比三家,再决定是否购买。

也可推荐他人购买,一旦完全成交,推荐人可获得实际售价 10% 的返现。
有意向者,详情请 点击这里 联系,工作时间立即回复。