【问题标题】:How to get the maximum scroll position of a page precisely?如何精确获取页面的最大滚动位置?
【发布时间】:2012-07-28 07:14:03
【问题描述】:

如果我使用公式

document_height - window_height = max_scroll_position

它的评估结果为 1 或 0,尽管我认为它应该始终评估为 0。 例如,在 Firefox 上 打开控制台,在 http://stackoverflow.com 上滚动到页面底部并在控制台上执行以下操作:

($(document).height() - $(window).height()) - $(document).scrollTop()

我得到 1 作为答案(记得将滚动位置保持在最底部) 然而,在 jquery.com 上,执行上述操作会得到 0

我错过了什么?

【问题讨论】:

  • 滚动到页面底部并运行该代码(chrome)时我得到“0”,在 Firefox 中得到 1(内置控制台和 firebug)。
  • 如果您使用的是 Chrome,您可能会被放大。缩小到原生缩放级别,您会得到0
  • 用户可能被放大了,所以这个问题的答案应该可以解释这一点。
  • Firefox 似乎只在缩放时给出偏移量(至少对我而言),所以它很可能是舍入误差(这取决于您正在查看的网站的高度)。

标签: javascript html dom browser


【解决方案1】:

经过一些测试,那额外的 1 个像素肯定是舍入误差。所有这三个变量(文档高度、窗口高度和滚动顶部)都保持在更高的内部精度或未缩放浏览器窗口的比例,然后根据需要进行缩放和舍入以满足 JavaScript 属性的要求。在某些边缘情况下,随着缩放比例的增加,这些值变得更有可能,这些值会以产生您看到的不一致结果的方式进行舍入。

除非您根据其他变量的值多次快速调整这些变量中的一个,否则此舍入误差不太可能导致用户可见的任何问题。如果您必须经常调整它们,那么您可能应该缓存调整后的数字,并使用您的缓存版本而不是浏览器报告的数字进行进一步计算。

[注意:使用 OP 中的公式,在 Firefox 中放大 250% 时,我最终能够得到 -1 的舍入误差。]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多