3

...我问的原因是 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 之神可以提出一些建议。我真的很想能够在这个命令中使用空格键。

4

2 回答 2

2

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

于 2011-02-28T08:15:01.227 回答
-1

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

于 2011-02-28T08:49:24.077 回答