Javascript offsetTop与jQuery.offset().top

Javascript offsetTop与jQuery.offset().top,javascript,jquery,offset,Javascript,Jquery,Offset,我已经读到,offsetLeft和offsetTop不能在所有浏览器中正常工作jQuery.offset()应该为此提供一个抽象,以提供正确的xbrowser值 我想做的是得到元素点击位置相对于元素左上角的坐标 问题是jQuery.offset().top实际上在FFX3.6中给了我一个十进制值(在IE和Chrome中,这两个值是匹配的) 这就是问题所在。如果单击底部图像,jQuery.offset().top返回327.5,但offsetTop返回328 我认为offset()返回了正确的值,

我已经读到,
offsetLeft
offsetTop
不能在所有浏览器中正常工作
jQuery.offset()
应该为此提供一个抽象,以提供正确的xbrowser值

我想做的是得到元素点击位置相对于元素左上角的坐标

问题是
jQuery.offset().top
实际上在FFX3.6中给了我一个十进制值(在IE和Chrome中,这两个值是匹配的)

这就是问题所在。如果单击底部图像,
jQuery.offset().top
返回327.5,但
offsetTop
返回328


我认为
offset()
返回了正确的值,我应该使用它,因为它可以跨浏览器工作。然而,人们显然不能点击像素的小数点。确定jQuery返回的偏移量
Math.round()
的真实偏移量的正确方法是什么?我应该使用偏移量,还是完全使用其他方法?

我认为你说得对,人们不能点击半像素,所以我个人会使用四舍五入的jQuery offset…

你可以使用
parseInt(jQuery.offset().top)
始终使用整数(primitive-
int
)所有浏览器中的值。

使用
em
作为测量单位,
%
中的相对
字体大小
可能是非整数

我还提出理论,当缩放不是100%时,
偏移量可能不是整数,但这取决于浏览器处理缩放的方式。

试试这个:
parseInt(jQuery.offset().top,10)
这是关于
.offset()
的说明:

获取第一个元素的当前坐标,或设置 匹配元素集中每个元素的坐标,相对 到文档

这是关于
.offsetTop
的说明:

offsetTop返回当前元素相对于 偏移父节点的顶部

这是jQuery v.1.11
.offset()
在获取坐标时基本上要做的:

var box = { top: 0, left: 0 };

// BlackBerry 5, iOS 3 (original iPhone)
if ( typeof elem.getBoundingClientRect !== strundefined ) {
  box = elem.getBoundingClientRect();
}
win = getWindow( doc );
return {
  top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
  left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
};
  • pageYOffset
    直观地表示页面滚动了多少

  • docElem.scrollTop
    是IEDOS parseInt()舍入双倍还是截断它们的回退方法?它只取数字的整数部分,在所有浏览器中都是相同的。OP声明在一个浏览器中给出327.5,而在另一个浏览器中给出328。因此,如果只取整数部分(truncate),OP本身就是一个例子,说明它在所有浏览器中都不相同。对于本例,至少必须对两者进行四舍五入才能给出相同的数字。如果缩放不是100%,offset()。top将给您带来大量其他问题。。。当使用CSS缩放时,jQuery偏移量会给出相对于视口的位置,而不是相对于视口的位置document@Klaus:你能解释一下到底有什么区别吗?@JanTuroň:区别在于它是相对于浏览器窗口的顶部,而不是文档的“真正顶部”。这意味着如果你滚动它的顶部超过窗口的顶部,它将返回负值。我希望它背后有原因,这样我就可以投票支持你