当我提醒值时.position().left
,它在Chrome上返回0 .使用其他浏览器,它返回实际数字.为什么会这样?
基于Webkit的浏览器(如Chrome和Safari)只有在图像完全加载后才能访问图像width
和height
属性.只要加载DOM,其他浏览器就可以访问这些信息(他们不需要完全加载图像就知道它们的大小).
因此,如果您的页面中有图像,使用基于Webkit的浏览器,则应offset
在$(window).load
事件触发后访问信息,而不是在事件发生后访问$(document).ready
.
通过阅读http://api.jquery.com/position/上的评论,有几种方法可以解决这个问题.我找到的工作是
Ajaho [主持人]:此插件功能修复了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
在我做过的一些测试中,我使用类似于大卫的方法在Chrome中工作(从第一次尝试开始就可以获得该值).
在我的"真实"应用程序甚至读取点击事件的位置失败(这可能消除任何加载速度问题).一些评论(在其他论坛中)说它可能与使用有关display:inline-block
.但是我无法使用重现问题inline-block
.所以它可能是另一回事.