Chrome的jQuery位置问题
当我提醒值.position().left
,它在Chrome上返回0。 使用其他浏览器,它返回实际数字。 为什么会这样?
基于Webkit的浏览器(如Chrome和Safari)只有在图像完全加载后才能访问图像width
和height
属性。 只要加载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 . . .