【问题标题】:Why does window.scrollMaxY incorrectly returns zero in Firefox为什么 window.scrollMaxY 在 Firefox 中错误地返回零
【发布时间】:2014-06-10 10:35:30
【问题描述】:

我正在尝试编写一些代码,将页面滚动到一个元素,然后调整滚动位置以考虑带有position: fixed 的标题。

似乎最明智的做法是使用类似于

的东西
var element = document.getElementById('myElement');
element.scrollIntoView();
if(window.scrollY < window.scrollMaxY)
    window.scroll(0,window.scrollY - 50);

起初这似乎有效。我不知道刚刚发生了什么变化,但由于某种原因,现在 window.scrollMaxY 刚刚开始返回 0,即使明显有滚动条也不应该为零。

【问题讨论】:

    标签: javascript firefox window scroll


    【解决方案1】:

    在我发布完问题之前,我在考虑替代解决方案时就意识到问题出在哪里。

    知道 WebKit 还不支持 window.scrollMaxY,我找到了 https://stackoverflow.com/a/1732727/990262 并基于此创建了我自己的 polyfill,如下所示,位于我的 Javascript 文件的顶部。

    /* For webkit and any other browser that doesn't have scrollMaxY */
    if(!window.scrollMaxY) window.scrollMaxY = document.documentElement.scrollHeight - document.documentElement.clientHeight; 
    

    由于大部分内容是通过 AJAX 加载的,所以在页面加载时,scrollMaxY 的值为零,计算为 false,导致这段代码用计算结果替换了实际值,这结果也是零。

    解决方案是修改 polyfill 以使测试更具体,例如if 'scrollMaxY' in window) 而不是 if(!window.scrollMaxY) 并将分配的值包装在一个函数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2019-10-26
      相关资源
      最近更新 更多