2010-06-15 81 views
68

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

我可以这样做:

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

,它是有效的。

但似乎:

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

是不确定的。

那么,如何在jQuery中完成这项工作呢?

谢谢!

回答

127

亚历克斯,加里:

按照要求,这里是我的评论张贴作为一个答案:

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

谢谢你让我知道。

+0

这不适用于CSS转换,偏移将受转换影响,但outerWidth(和width)不会。 – 2014-12-29 16:37:05

+2

这是从窗口右侧的偏移量。对于窗口左侧的偏移量,请参阅cdZ的[答案](http://stackoverflow.com/a/5643921/675721)。 – 2015-10-08 21:13:01

+0

元素的最右边可以被更多地“本地”找到$ whatever [0] .getBoundingClientRect()。right'。这是相对于窗口的左边缘。 – pstanton 2017-10-03 05:45:48

27
var $whatever  = $('#whatever'); 
var ending_right  = ($(window).width() - ($whatever.offset().left + $whatever.outerWidth())); 

参考:.outerWidth()

+1

我认为需要添加它们,然后减去1.如果宽度是2,那么剩下的是在10 ,并且右边不是12而是11. – 2010-06-15 07:02:26

+30

这是不正确的答案。在CSS中,“left”意味着“窗口/父窗口左侧的元素的最左点的偏移量”,“右”意味着“窗口/父窗口右侧的元素的最右点的偏移量”。所以,正确的答案是:'var rt =($(window).width() - ($ whatever.offset()。left + $ whatever.outerWidth()));' – 2011-12-14 10:58:24

+0

人们怎么没注意到这是不正确的答案:0 – 2011-12-28 22:15:55

14

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

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

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

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

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

这是一个让元素正确的技巧。 谢谢Greg! – n2lose 2011-02-24 07:04:43

7

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

$(“#whatever”)。offset()。left + $(“#”无论“)。outerWidth()

此代码将获得相对于左侧的正确位置。如果目的是为了获得相对右侧位置向右(使用CSS right属性时等),那么除了代码是必要如下:

$(“#parent_container”)innerWidth( ) - ($(“#whatever”)。offset()。left + $(“#whatever”)。outerWidth())

此代码在需要将右侧设置为当您最初无法在CSS中设置right属性时,它是一个固定锚点。

3

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

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

offset.right = $(window).width() - (offset.left + $('#whatever').outerWidth(true)); 
offset.bottom = $(window).height() - (offset.top + $('#whatever').outerHeight(true)); 
3

实际上,这些仅在窗口没有从左上角滚动时才起作用。
你必须减去窗口滚动值获得的偏移,使他们在网页上停留的重新定位元素有用:

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

获得一个div/table (left) = $("#whatever").offset().left;的定位点 - OK!

获取div/table (right)的定位点,您可以使用下面的代码。

$("#whatever").width(); 
2

有一个内在的DOM API,它实现这一开箱 - getBoundingClientRect

document.querySelector("#whatever").getBoundingClientRect().right 
+1

但getBoundingClientRect返回相对于与文档无关的视口,这是offset()提供的内容。 – 2017-04-05 23:40:52