如何获得元素的正确偏移? - jQuery

Ale*_*lex 79 jquery offset

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

我可以:

$("#whatever").offset().left;
Run Code Online (Sandbox Code Playgroud)

它是有效的.

但似乎:

$("#whatever").offset().right 
Run Code Online (Sandbox Code Playgroud)

未定义.

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

谢谢!!

Bre*_*ord 154

亚历克斯,加里:

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

var rt = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Run Code Online (Sandbox Code Playgroud)

谢谢你让我知道.

在伪代码中,可以表示为:

正确的抵消是:

窗口的宽度为 MINUS
(元素的左侧偏移加上元素的外部宽度)

  • 这是窗口右侧的偏移量.有关窗口左侧的偏移量,请参阅cdZ的[answer](http://stackoverflow.com/a/5643921/675721). (2认同)

jAn*_*ndy 28

var $whatever        = $('#whatever');
var ending_right     = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth()));
Run Code Online (Sandbox Code Playgroud)

参考:.outerWidth()

  • 这是一个错误的答案.在CSS中,"left"表示"元素最左边的点从窗口/父元素的左侧偏移","right"表示"元素的最右边点从窗口/父元素的右侧偏移" ".所以,正确的答案是:`var rt =($(window).width() - ($ whatever.offset().left + $ whatever.outerWidth()));` (31认同)
  • jquery真的需要为position()添加一个正确的参数 (7认同)
  • @BrendonCrawford您应该将该评论移至答案. (5认同)
  • 任何人通过的注释 - 上面的答案已被编辑,以正确反映Brendon的评论. (3认同)

Gre*_*reg 15

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

$("#whatever").offset().left
Run Code Online (Sandbox Code Playgroud)

$("#whatever").offset().top
Run Code Online (Sandbox Code Playgroud)

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

$("#whatever").offset().left + $("#whatever").outerWidth()
Run Code Online (Sandbox Code Playgroud)


小智 8

只是格雷格所说的一个补充:

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

此代码将相对于左侧获得正确的位置.如果打算获得相对于右侧的右侧位置(就像使用CSS right属性时那样),则需要添加代码,如下所示:

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

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


Gar*_*ary 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));
Run Code Online (Sandbox Code Playgroud)


小智 5

实际上,只有在完全不从左上角滚动窗口时,这些功能才起作用。
您必须减去窗口滚动值才能获得一个偏移量,该偏移量对于重新定位元素非常有用,因此它们可以留在页面上:

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));
Run Code Online (Sandbox Code Playgroud)


Bar*_*ney 5

有一个本机的DOM API可以实现这一点— getBoundingClientRect

document.querySelector("#whatever").getBoundingClientRect().right
Run Code Online (Sandbox Code Playgroud)

  • 但是getBoundingClientRect返回相对于视口而不是相对于文档,这是offset()提供的。 (2认同)