【发布时间】:2011-02-28 08:09:00
【问题描述】:
...我问的原因是 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 之神可以提出一些建议。我真的很想能够在这个命令中使用空格键。
【问题讨论】:
-
您是否考虑过直接设置 Y 偏移量,而不是让 window.scroll 为您设置?我以这种方式在 Safari 中处理滚动,效果很好。我同意这不是一个原始的解决方案。
-
@Pete 我不确定你的意思。就像手动调整我的#huge div 的 Y 位置一样?还是别的什么?
-
huge.style.top = target_scroll_to.toString() + 'px';
标签: javascript safari scroll onkeydown