Запретить браузерную прокрутку в HTML5 History popstate

Можно ли предотвратить поведение прокрутки документа по умолчанию при возникновении события popstate?

Наш сайт использует анимированную прокрутку jQuery и History.js, а изменения состояния должны прокручивать пользователя по разным областям страницы с помощью pushstate или popstate. Проблема в том, что браузер автоматически восстанавливает позицию прокрутки предыдущего состояния при возникновении события popstate.

Я пытался использовать элемент контейнера, установленный на 100% ширины и высоты документа, и прокручивать содержимое внутри этого контейнера. Проблема с тем, что я обнаружил, заключается в том, что он выглядит не так гладко, как прокрутка документа; особенно если вы используете много css3, таких как box-shadows и градиенты.

Я также пытался сохранить позицию прокрутки документа во время прокрутки, инициированной пользователем, и восстановить ее после того, как браузер прокручивает страницу (в открытом состоянии). Это прекрасно работает в Firefox 12, но в Chrome 19 наблюдается мерцание из-за прокрутки и восстановления страницы. Я предполагаю, что это связано с задержкой между прокруткой и событием прокрутки (когда позиция прокрутки восстанавливается).

Firefox прокручивает страницу (и запускает событие прокрутки) до того, как сработает popstate и Chrome сначала сгенерирует popstate, а затем прокручивает документ.

Все сайты, которые я видел и которые используют API истории, либо используют решение, аналогичное описанному выше, либо просто игнорируют изменение положения прокрутки, когда пользователь переходит назад / вперед (например, GitHub).

Можно ли вообще запретить прокрутку документа на событиях popstate?

Ответы на вопрос(11)

Ваш ответ на вопрос