jquery中offset()方法使用示例

2016-02-22    编辑:kp12345     点击(
offset()函数用于设置或返回当前匹配元素相对于当前文档的偏移,也就是相对于当前文档的坐标。该函数只对可见元素有效,下面来看几个关于jquery中offset()方法使用示例


jQuery 1.2 新增该函数。

jQueryObject.offset( [ coordinates ] )

注意:


1、如果省略了coordinates参数,则表示获取偏移位置;如果指定了该参数,则表示设置偏移位置。2、offset()函数的"设置"操作针对的是当前jQuery对象所匹配的每一个元素;"读取"操作只针对第一个匹配的元素。


1、获得元素相对于document的位置

获得位置是元素相对于document的位置信息,通常可以说是这个元素的坐标值。

// 元素相对于document的左位移
$("#some-id").offset().left
// 元素相对于document的上位移
$("#some-id").offset().top

2、设置元素相对于document的位置

在设置元素offset的时候,需要该元素为已定位样式,即:relative、absolute、fixed等除了static的position属性值。其实这里,我一直不明白,为什么会有static这个position属性值,而不直接是relative呢?此问暂且按下,继续说jquery的offset()使用方法。

// 设置元素相对于document的位移,该元素的position必须为非static值
$("#some-id").offset({left:123,top:99});

注意:

需要注意的是,offset的设置值,必须成对出现,否则会报错的哦!

offset不仅可以设置单个元素,也可以设置多个元素不同的坐标值,而不需要jQuery.each操作了,如:

$(".some-class").offset(function(index,coords)
{
 // index为元素索引
 // coords为元素的坐标:top、left
 // 函数必须返回坐标值
 return {top:ccoordsoord.top+index,left:coords.left+index};
});

 

实验:
  offset()的top是指元素与document的上边的距离,而不是浏览器当前窗体的上边缘,如图1。
   图1:document高度超过window,window出现滚动条,拖动滚动条,提交按钮的offset().top不变,因为按钮与document上边缘距离未变。
  
  图2:document中的div有滚动条,提交按钮的offset().top随div滚动条变化而变化,因为按钮与document上边缘距离已变。
  
  offset().left 同理。
  通过上面的实验我们可以得出以下结论:offset() 获取元素(html 元素)距离document上边缘、左边缘的像素,我们只要清楚浏览器中document是那部分就可以正确使用offset()。关于document可以阅读 JQuery   window、document、 body
应用:
  1.那么我们怎么保证元素完整的显示在浏览器视窗里呢?我们可以结合offset 和 scrollTop来实现。
  scrollTop获取的是什么值?根据我的实验,只有元素具有滚动条,并且滚动了一定距离,才有scrollTop值,没有滚动条的元素scrollTop=0。
  上面提交button无滚动条,它的scrollTop恒等于0。
  以前我有种错误的认知:document里面的元素与document具有相同的滚动值,这是错误的,子元素与容器的滚动值无关。
  按图1(document有滚动条),需计算控件的offsetTop、height,document的scrollTop;
  按图2(document无滚动条),计算控件的offsetTop、height

  2.浮动div在滚动条滚动时保持在原位

按图1,

var firstTop = $("浮动DIV").offset().top;
var top = firstTop + $(document).scrollTop();
$(浮动DIV).offset({ top: top });
  按图2,

var top = $(浮动DIV).offset().top;
$("浮动DIV").offset({ top: top });