Есть ли способ установить положение прокрутки окна без использования scroll () или scrollTo ()? - PullRequest
3 голосов
/ 28 февраля 2011

... причина, по которой я спрашиваю, состоит в том, что в Safari есть ошибка в реализации scroll (), которая нарушает мой пользовательский интерфейс.

Представьте себе страницу:

<body>
    <div id="huge" style="width: 4000px; height: 4000px;"></div>
</body>

... так что вы получаете как горизонтальные, так и вертикальные полосы прокрутки. Теперь, обычно, когда вы нажимаете полосу прокрутки, страница прокручивается (вертикально). В целях нашего необычного пользовательского интерфейса мы не хотим, чтобы это произошло, поэтому мы подавляем событие 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 здесь может что-то подсказать. Мне бы очень хотелось использовать пробел для этой команды.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

Если вы знаете, где в документе вы хотите выполнить прокрутку, вы можете просто использовать именованные якоря. Установка document.location на якорь (например, #top, #div50 или что-либо еще) должна быть очень надежной.

0 голосов
/ 28 февраля 2011

Используйте document.documentElement.scrollTop = ...document.body в некоторых браузерах).

...