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 ピクセル以上のスクロールを行っている場合、アニメーション化されたスクロールは深刻な不快感を引き起こす可能性があります。

私はこれを回避する方法を見つけようとして頭を悩ませています。1つもないと思いますが、Javascriptの神が何かを提案してくれることを願っています. このコマンドにスペースバーを使用できるようにしたいと思っています。

4

2 に答える 2

2

ドキュメント内でスクロールしたい場所がわかっている場合は、名前付きアンカーを簡単に使用できます。document.locationアンカー ( など) への#top設定は非常に信頼できる#div50はずです。

于 2011-02-28T08:15:01.227 に答える
-1

Use document.documentElement.scrollTop = ... (and document.body in some browsers).

于 2011-02-28T08:49:24.077 に答える