为什么window.scrollMaxY在Firefox中错误地返回零

时间:2014-06-10 10:35:31

标签: javascript firefox window scroll

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

似乎最明智的做法是使用

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

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

1 个答案:

答案 0 :(得分:0)

在我发布问题之前,我意识到在考虑替代解决方案时问题是什么。

知道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)并将指定的值包装在函数中。