有没有办法设置窗口的滚动位置而不使用scroll()或scrollTo()?

时间:2011-02-28 08:09:00

标签: javascript safari scroll onkeydown

...我问的原因是Safari在执行scroll()方面存在一个错误,它会破坏我的UI。

想象一下页面:

<body>
    <div id="huge" style="width: 4000px; height: 4000px;"></div>
</body>

...这样你就可以获得水平和垂直滚动条。现在,通常当您按滚动条时,页面会滚动(垂直)。出于我们花哨的UI的目的,我们不希望发生这种情况,因此我们压缩keyDown事件:

window.onkeydown = function(e) {
    if(e.keyCode == 32)
    {
        return false;
    }
};

这非常有用......除非我们决定完全阻止滚动,否则我们需要自己的自定义滚动行为:

window.onkeydown = function(e) {
    if(e.keyCode == 32)
    {
        window.scroll(foo, bar); // Causes odd behavior in Safari
        return false;
    }
};

在其他浏览器(Chrome,Firefox)中,这会立即将窗口的滚动位置移动到所需的坐标。但是在Safari中,这会使窗口动画到所需的滚动位置,类似于按空格键时发生的滚动动画。

请注意,如果您触发此空格键以外的任何键滚动,则不会发生动画;窗口会像其他浏览器一样立即滚动。

如果你碰巧滚动,比如1000像素或更多,那么动画卷轴会引起一些严重的不适。

我正试图找到解决办法的方法。我怀疑没有一个,但我希望这里有一些Javascript的神可以提出一些建议。我真的希望能够使用空格键来执行此命令。

2 个答案:

答案 0 :(得分:2)

如果您知道要滚动到文档的哪个位置,那么您可以简单地使用命名锚点。将document.location设置为锚点(例如#top#div50或其他)应该非常可靠。

答案 1 :(得分:-1)

在某些浏览器中使用document.documentElement.scrollTop = ...(和document.body)。