Chrome的jQuery位置问题

当我提醒值.position().left ,它在Chrome上返回0。 使用其他浏览器,它返回实际数字。 为什么会这样?

基于Webkit的浏览器(如Chrome和Safari)只有在图像完全加载后才能访问图像widthheight属性。 只要加载DOM,其他浏览器就可以访问这些信息(他们不需要完全加载图像来了解它们的大小)。

因此,如果您的页面中有图像,使用基于Webkit的浏览器,您应该在$(window).load事件触发后访问offset信息,而不是在$(document).ready事件之后访问。

通过阅读http://api.jquery.com/position/上的评论,有几种方法可以解决这个问题。 我找到的工作是

Ajaho [主持人]:此插件function修复了Chrome中错误位置的问题

 jQuery.fn.aPosition = function() { thisLeft = this.offset().left; thisTop = this.offset().top; thisParent = this.parent(); parentLeft = thisParent.offset().left; parentTop = thisParent.offset().top; return { left: thisLeft-parentLeft, top: thisTop-parentTop }; }; 

Webkit有时可能太快,但它经常在jQuery中处理。 您可以使用以下内容进行调试:

 var v, elem = $('.myElement'); window.setTimeout(function() { v = elem.position().left; console.log(v); if (v) { return false; } window.setTimeout(arguments.callee, 1); }, 1); 

这将检查位置是否以及何时可用。 如果您在无穷远中记录“0”,则position().left是”永远不可用,您需要在其他地方进行调试。

我有同样的问题..

我使用: .offset().left修改了它。 但要注意不一样: http : //api.jquery.com/offset/

.position().left在我做过的一些测试中,我使用了类似于大卫的方法(在第一次尝试后可用的值)。

在我的“真实”应用程序甚至读取点击事件的位置失败(这可能消除任何加载速度问题)。 一些评论(在其他论坛中)说它可能与使用display:inline-block 。 但是我无法使用inline-block重现问题。 所以它可能是另一回事。

自问题可以追溯到2010年以来可能有点过时但这对我在Chrome中的定位问题起了作用:

 $(window).load(function(){ p = $('element').offset(); // et cetera }); 

使用jQuery(window).load()而不是jQuery(document).ready()

对我而言,它是通过在关闭body标签之前将javascript代码放在文档中来实现的

这样它在加载所有内容后执行代码

   
content
. . .