Chrome的jQuery位置问题

时间:2010-01-31 19:40:32

标签: jquery google-chrome position

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

8 个答案:

答案 0 :(得分:35)

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

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

答案 1 :(得分:8)

通过阅读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
    };
};

答案 2 :(得分:7)

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“永不”可用,您需要在其他地方进行调试。

答案 3 :(得分:6)

我遇到了同样的问题..

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

.position().left在我使用的一些测试中在Chrome中工作过 与大卫相似的方法(自从大卫以来就有了价值) 第一次尝试)。

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

对我而言,它是通过在关闭body标签

之前将javascript代码放入文档中来实现的

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

    <body>
        <div>content</div>
        <div class='footer'>footer</div>
        .
        .
        .

        <script type='text/javascript>
            $(document).ready(function(){
              var footer_position = $(".footer").offset().top;
              console.log(footer_position);
            });
        </script>
     </body>

答案 7 :(得分:-1)

我使用此功能来纠正它。

function getElementPosition(id) {
          var offsetTrail = document.getElementById(id);
          var offsetBottom = 0;
          var offsetTop = 0;
          while (offsetTrail) {
              offsetBottom += offsetTrail.offsetBottom;
              offsetTop += offsetTrail.offsetTop;
              offsetTrail = offsetTrail.offsetParent;
          }

          return {
              bottom: offsetBottom,
              toppos: offsetTop
          };
      }