繁体   English   中英

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

[英]Is there a way to set the window's scroll position without using scroll() or scrollTo()?

...我问的原因是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的神可以提出一些建议。 我真的希望能够使用空格键来执行此命令。

如果您知道要滚动到文档的哪个位置,则只需使用命名锚点即可。 设置document.location到锚(如#top#div50或其他)应该是非常可靠的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM