1

我正在实现无限滚动,这意味着我将大块内容附加到 DOM 中(通过 jquery 和 javascript)。

为了让用户感觉流畅,我们需要进行一些手动滚动以保持内容窗口“在同一个位置”,尤其是当我们在用户看到的内容前面添加文本时。为了实现这一点(添加一个块,然后将内容向下滚动到我们添加的确切数量),我们需要能够确定我们刚刚添加的内容的高度。这就是 Firefox 和 IE 不同的地方。Firefox 正确处理了这个问题,并滚动到我的内容中的正确位置,但是当真实值约为 2400 像素时,IE 报告的高度约为 600 像素。

var h1 = $(document).height(); //take the height before appending
$('#textChunks').prepend(newContent); // prepend stuff on top
var h2 = $(document).height();//take the height again...
alert(h2-h1);

IE 中的警报值始终是错误的(相差 3 倍),无论我如何进行测量,它都是一致的(我可以改为测量 DOM 中的“newContent”的高度,而 IE 仍然报告它错误,但始终如一)。甚至 .scrollIntoView() 之类的其他“内置”javascript 函数在 IE 中似乎也恰好偏离了这个数量。

作为健全性检查,我可以在我的桌面上创建一个独立的 html 文件,其中包含我的内容示例,并且在这种情况下它可以工作。所以问题似乎只是在页面加载后添加的内容。

4

2 回答 2

1

答案是怪癖模式!

一个很好的参考:http ://webdesign.about.com/cs/doctype/a/aaquirksmode.htm

作为快速测试,我更改了本地设置(IE 中的 F12,然后将“文档模式”从 Quirks 更改为 IE9 标准),这解决了我的滚动问题!

如果没有 doctype 声明,IE 会默认为 quirks 模式,这显然会导致页面加载后添加到 DOM 的元素报告不正确的高度,这自然会导致滚动不可靠。另请注意,我在框架内的框架内工作,因此为我的内容指定 DOCTYPE 的最佳位置是在 OUTERMOST FRAME 中。

于 2012-09-26T16:05:59.870 回答
0

使用 HTMLElement.offsetHeight 获取任何 HTMLElement 的“真实”高度。

于 2012-09-25T20:46:24.217 回答