【jquery中offset方法使用方法】jquery中offset()方法使用示例

更新时间:2019-10-21    来源:jquery    手机版     字体:

【www.bbyears.com--jquery】


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 });

本文来源:http://www.bbyears.com/wangyezhizuo/74645.html