2

FIDDLE 在这里(记录到控制台)

这种情况是当页面以 a 开始时,其<H1>顶部边距大于在 上找到的边距<body>

这会导致<body>在页面中被推低,但$('body').offset().top仍然设置为<body>的边缘顶部。这当然会导致我的调试元素(突出显示元素的位置)不正确,因为主体的虚拟元素现在位于错误的位置。

奇怪的是,其余的$(elem).offset()值对于<body>.

是否有一个解决方法,没有手动检查带有 while 循环的 body 的递归第一个孩子的边距顶部?

注意到 Safari 6 上的问题,但我怀疑我也会在 Chrome 上找到它。

4

4 回答 4

2

使用偏移量加上元素高度的差html减去body元素可能会起作用。

console.log("body.offset().top = "+ ($('html').offset().top + $('html').height() - $('body').height() ));


更新:此解决方案仅在页面上没有边距底部时才有效。

您还可以在页面底部添加一个清晰的 div。

$('body').append("<div style=\"clear: all;\">&nbsp;</div>");

请注意,div 必须有内容才能工作。

http://jsfiddle.net/SCGdZ/7/

于 2013-01-04T04:46:56.023 回答
1

我发现了一篇 John Resig 的帖子,介绍了这里getBoundingClientRect的速度和真棒......我想知道为什么它不用于 jQuery !offset()

我将改用这种方法,希望它不会遇到同样的问题。

更新:看起来不错!(非整数顶部值是由于某种方式具有风格-webkit-margin-before: 0.67em;

可以看到body有margin=8

在此处输入图像描述

于 2013-01-04T04:30:08.627 回答
1

jQuery 1.9.0 已经解决了这个问题。非常感谢,jQuery 很棒。

于 2013-01-17T17:13:41.067 回答
0

在这里找到

a[0].style.marginTop即使在 css 中声明它之后它仍然未初始化,这就是它什么都不返回的原因。

因此,我们必须注意初始化a[0].style.marginTop

于 2013-01-04T05:21:49.510 回答