`

关于jQuery中的offset()和position()

 
阅读更多

在jQuery中有两个获取元素位置的方法offset()和position()。position()方法是在1.2.6版本之后加入的,为什么要引入这个方法呢?这两个方法之间有什么异同?使用的时候应该注意哪些问题?什么时候使用offset(),什么时候又使用position()呢? 
先看看API对这这两个方法的定义:
offset():
获取匹配元素在当前视口的相对偏移。
返回的对象包含两个整形属性:top 和 left。此方法只对可见元素有效。
position():
获取匹配元素相对父元素的偏移。
返回的对象包含两个整形属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。
真的就这么简单吗?实践出真知。
先来看看在jQuery框架源码里面,是怎么获得position()的: 

//Get *real* offsetParent
var offsetParent = this.offsetParent(),
//Get correct offsets
offset = this.offset(),
parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ?
{ top: 0, left: 0 } : offsetParent.offset();
//Subtract element margins
//note: when an element has margin: auto the offsetLeft and marginLeft
//are the same in Safari causing offset.left to incorrectly be 0
offset.top-= num( this, marginTop);
offset.left -= num( this, marginLeft );
//Add offsetParent borders
parentOffset.top+= num( offsetParent, borderTopWidth);
parentOffset.left += num( offsetParent, borderLeftWidth );
//Subtract the two offsets
results = {
top: offset.top- parentOffset.top,
left: offset.left - parentOffset.left
};
 注意最后那段 代码:

results = {
    top: offset.top- parentOffset.top,
    left: offset.left - parentOffset.left
};
 代码的意思就是获取本身元素距离它的父元素的距离。

用图如下所示: 


也就是元素B距离元素A的距离。
在没有position()方法之前,计算B到A的距离 只有通过 先计算B距浏览器左边距 减去 A的。
有了position()方法之后,就可以快速计算出来。不过在使用position()之前,你需要了解一
下它们的定位方式。

可以看一下测试例子1: 点击这里浏览例子l

通过例子1页面测试的结果可以得出这个结论: 

1,使用position()方法时事实上是把该元素当绝对定位来处理,获取的是该元素相当于最近的一个拥有绝对或者相对定位的父元素的偏移位置。
2,使用position()方法时如果其所有的父元素都为默认定位(static)方式,则其处理方式和offset()一样,是当前窗口的相对偏移。
3,使用offset()方法不管该元素如何定位,也不管其父元素如何定位,都是获取的该元素相对于当前视口的偏移。

知道了这些特点后,相信你对它们已经熟悉了。进一步那么我们应该如何来合理的使用position()和offset()呢? 


就我个人的经验,通常获取一个元素A的位置是为了让另外的一个元素B正好出现在A元素的附近。通常有2种情况:

1,要显示的元素B存放在DOM的最顶端或者最底端(即其父元素就是body)。这个时候用offset()是最好的。
示例验证:
用offset 正常显示的例子 : 点击查看例子2
用position无法正常显示的例子 : 点击查看例子3
在以上两个例子中,元素B都存放在Dom 结构的最下面,由于其父元素就是BODY,所以,不管元素A如何定位,只要找的A相当与整个窗口的偏移位置,就可以解决问题。

2,若要显示的元素B存放在元素A的同一父元素下(即B为A的兄弟节点),这个时候使用position() 是最合适的。
用position正常显示的例子 :点击查看例子4
用offset五法正常显示的例子:点击查看例子5

那么我现在问你,如果我打算做一个跟随屏幕滚动的层,使用哪个方法呢?
如果你答得是:offset(),那么恭喜你。
如果我打算做一个类似于幻灯片的效果,你会使用哪个方法呢?

综上所述,使用position()还是offset()取决于你被控制的元素B DOM所在的位置。

 

 

分享到:
评论

相关推荐

    理解Jquery 的offset与position方法

    在jQuery中,`offset()`和`position()`方法是用来获取元素位置的重要工具,它们的主要区别在于参考对象的不同。理解这两个方法的用法对于进行精确的页面布局和动态效果处理至关重要。 `offset()`方法返回的是匹配...

    Jquery中offset()和position()的区别分析

    在进行网页开发时,定位元素是经常需要进行的操作,而在JQuery中,offset()和position()是用于获取元素位置的两个主要方法。它们虽然在某些情况下可以提供相似的结果,但这两个方法在使用上存在本质的区别。了解它们...

    Jquery中的offset()和position()深入剖析

    先看看这两个方法的定义。 offset(): 获取匹配元素在当前视口的相对... 先来看看在jquery框架源码里面,是怎么获得position()的: 代码如下: // Get *real* offsetParent var offsetParent = this.offsetParent(), /

    jQuery position() 函数详解以及jQuery中position函数的应用

    在上面提到的示例中,`.modal`对话框将根据`.daygrid`元素的位置进行定位,使用了`position()`和`offset`参数来确定最佳展示位置。 总之,`jQuery.position()`函数是实现精确元素定位的关键工具,通过它可以获取到...

    jQuery Position方法使用和兼容性

    首先,我们来详细探讨Position方法与jQuery中的另一个常用方法offset()之间的区别。offset()方法用于获取元素相对于文档的当前位置,其返回值包含元素的top和left属性。然而,Position方法返回的是相对于最近的定位...

    jQuery中offset()方法用法实例

    在web前端开发中,jQuery是一个广泛使用的JavaScript库,它极大地简化了HTML文档遍历、事件处理、动画和Ajax交互等...通过本文的介绍和实例演示,相信读者已经能够对jQuery中offset()方法的用法有了较为深入的理解。

    jquery根据锚点offset值实现动画切换

    在这篇文章的示例中,页面的主内容部分和背景部分都被设置为相对定位(position: relative),而且背景图片被设置为绝对定位(position: absolute),并且背景图片被放置在z轴的最底层(z-index: -5),以确保在滚动...

    offset jquery

    在本篇文章中,我们将深入探讨一个与jQuery相关的代码片段,该片段主要关注于如何使用`offset()`方法来获取DOM元素的位置,并进一步利用这些位置信息来...希望本文能帮助你更好地理解和应用jQuery中的`offset()`方法。

    jQuery 1.4.1 中文参考

    - `offset()`、`position()`、`scrollTop()`、`scrollLeft()`等:元素的位置和滚动信息。 - `height()`、`width()`、`innerHeight()`、`innerWidth()`、`outerHeight()`、`outerWidth()`:元素的尺寸计算。 **事件...

    JqueryApi中文手册

    **jQuery API 中文手册** jQuery 是一款广泛应用于前端开发的 JavaScript 库,它极大地简化了 JavaScript 的DOM操作、事件处理、动画制作以及...在实际开发中,结合实践与手册,可以更好地理解和掌握jQuery的精髓。

    jQuery.position()方法获取不到值的安全替换方法

    在jQuery中,获取元素位置的方法主要有两个:.position()和.offset()。.position()方法用于获取元素相对于其最近的已定位的父元素的位置,而.offset()方法则是获取相对于文档的绝对位置。然而,开发者在使用....

    jQuery jQuery-UI

    jQuery 和 jQuery UI 是两个在Web开发中广泛使用的JavaScript库,它们极大地简化了DOM操作、事件处理、动画效果以及用户界面的构建。以下是关于这两个库的详细知识点: **jQuery** jQuery 是一个轻量级的JavaScript...

    jquery中有哪些api jQuery主要API

    `offset()`、`position()`、`scrollTop()`和`scrollLeft()`用于获取元素的位置和滚动偏移量。`height()`、`width()`、`innerHeight()`、`innerWidth()`、`outerHeight()`和`outerWidth()`方法则用于获取元素的高度和...

    jquery用offset()方法获得元素的xy坐标

    在实际应用中,offset()和position()方法可以根据需要获得不同类型的坐标信息。它们是前端开发中常用的工具,对于处理动画、交互效果等都非常有帮助。理解这两个方法之间的区别以及如何正确使用它们,对于进行网页...

    js实现jquery的offset()方法实例

    尽管jQuery让这一操作变得简单,但在原生JavaScript中实现相同的功能则需要更多的代码和技巧。 原生JavaScript没有直接提供类似于offset()的便捷方法来直接获取元素的绝对偏移位置,但我们可以通过一些其他属性和...

    [原创] jQuery源码分析-17尺寸和大小 Dimensions & Offset

    本文将对jQuery中用于处理元素尺寸和偏移的接口进行深入分析,帮助开发者理解各种接口的应用场景和具体用法。 ### Offset接口 Offset接口主要包括`.offset()`和`.offsetParent()`两个方法。 #### .offset() `....

    jQuery3.2.1API中文手册

    - **尺寸与位置**: `.width()`, `.height()`, `.offset()`, `.position()`等获取或设置元素尺寸和位置。 **插件系统** jQuery生态系统中包含了众多插件,如jQuery UI(提供丰富的用户界面组件)和Bootstrap(前端...

Global site tag (gtag.js) - Google Analytics