...私が尋ねる理由は、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 ピクセル以上のスクロールを行っている場合、アニメーション化されたスクロールは深刻な不快感を引き起こす可能性があります。
私はこれを回避する方法を見つけようとして頭を悩ませています。1つもないと思いますが、Javascriptの神が何かを提案してくれることを願っています. このコマンドにスペースバーを使用できるようにしたいと思っています。