90

这可能是一个非常简单的问题,但是如何在 jQuery 中获取元素的正确偏移量?

我可以:

$("#whatever").offset().left;

它是有效的。

但似乎:

$("#whatever").offset().right 

未定义。

那么如何在 jQuery 中实现这一点呢?

谢谢!!

4

8 回答 8

165

亚历克斯,加里:

根据要求,这是我作为答案发布的评论:

var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

谢谢你让我知道。

在伪代码中可以表示为:

正确的偏移量是:

窗口的宽度减去
(元素的左偏移加上元素的外部宽度

于 2012-06-21T22:47:08.670 回答
29
var $whatever        = $('#whatever');
var ending_right     = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));

参考:.outerWidth()

于 2010-06-15T06:58:57.587 回答
16

也许我误解了你的问题,但偏移量应该给你两个变量:水平和垂直。这定义了元素的位置。所以你要找的是:

$("#whatever").offset().left

$("#whatever").offset().top

如果您需要知道元素的右边界在哪里,那么您应该使用:

$("#whatever").offset().left + $("#whatever").outerWidth()
于 2010-06-15T06:59:21.007 回答
9

只是对 Greg 所说的话的补充:

$("#whatever").offset().left + $("#whatever").outerWidth()

此代码将获得相对于左侧的正确位置。如果目的是获得相对于右侧的右侧位置(例如使用 CSSright属性时),则需要在代码中添加如下内容:

$("#parent_container").innerWidth() - ($("#whatever").offset().left + $("#whatever").outerWidth())

right此代码在动画中很有用,当您最初无法在 CSS 中设置属性时,您必须将右侧设置为固定锚点。

于 2011-04-13T03:01:51.093 回答
6

实际上,这些仅在窗口根本不从左上角滚动时才起作用。
您必须减去窗口滚动值以获得对重新定位元素有用的偏移量,以便它们留在页面上:

var offset = $('#whatever').offset();

offset.right = ($(window).width() + $(window).scrollLeft()) - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = ($(window).height() + $(window).scrollTop()) - (offset.top + $('#whatever').outerHeight(true));
于 2012-07-18T20:24:10.127 回答
5

Brendon Crawford 在这里有最好的答案(在评论中),所以我会把它移到一个答案,直到他这样做(也许会扩大一点)。

var offset = $('#whatever').offset();

offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true));
offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true));
于 2012-05-14T02:54:36.397 回答
5

有一个本地 DOM API 可以开箱即用地实现这一点—— getBoundingClientRect

document.querySelector("#whatever").getBoundingClientRect().right
于 2016-04-13T11:52:22.657 回答
2

获得 a 的锚点div/table (left) = $("#whatever").offset().left;- 好的!

获取 a 的锚点div/table (right)可以使用下面的代码。

 $("#whatever").width();
于 2013-04-18T09:37:54.783 回答