Можно ли предотвратить стандартное поведение прокрутки документа при возникновении события popstate?
Наш сайт использует анимированную прокрутку jQuery и History.js, а изменения состояния должны прокручивать пользователя в разные области страницы с помощью pushstate или popstate. Проблема в том, что браузер автоматически восстанавливает позицию прокрутки предыдущего состояния при возникновении события popstate.
Я пробовал использовать элемент контейнера со 100% шириной и высотой документа и прокручивать содержимое внутри этого контейнера. Я обнаружил, что проблема заключается в том, что это не так гладко, как прокрутка документа; особенно при использовании большого количества CSS3, таких как тени и градиенты.
Я также пробовал сохранять позицию прокрутки документа во время прокрутки, инициированной пользователем, и восстанавливать ее после того, как браузер прокручивает страницу (в popstate). Это отлично работает в Firefox 12, но в Chrome 19 наблюдается мерцание из-за прокрутки и восстановления страницы. Я предполагаю, что это связано с задержкой между прокруткой и запуском события прокрутки (когда положение прокрутки восстанавливается).
Firefox прокручивает страницу (и запускает событие scroll) перед запуском popstate, а Chrome сначала запускает popstate, а затем прокручивает документ.
Все сайты, которые я видел, которые используют API истории, либо используют решение, подобное приведенному выше, либо просто игнорируют изменение позиции прокрутки, когда пользователь возвращается назад / вперед (например, GitHub).
Можно ли вообще предотвратить прокрутку документа при всплывающих событиях?
document.body.clientHeight
но я не видел, чтобы он работал во всех браузерах.