Czy można zapobiec domyślnemu zachowaniu przewijania dokumentu w przypadku wystąpienia zdarzenia popstate?
Nasza witryna wykorzystuje animowane przewijanie jQuery i History.js, a zmiany stanu powinny przewijać użytkownika do różnych obszarów strony, czy to poprzez pushstate, czy popstate. Problem polega na tym, że przeglądarka automatycznie przywraca pozycję przewijania z poprzedniego stanu, gdy wystąpi zdarzenie popstate.
Próbowałem użyć elementu kontenera ustawionego na 100% szerokości i wysokości dokumentu i przewijać zawartość w tym kontenerze. Problem z tym, który znalazłem, polega na tym, że nie wydaje się być tak płynny jak przewijanie dokumentu; zwłaszcza jeśli używasz wielu css3, takich jak cienie i gradienty.
Próbowałem również zapisać pozycję przewijania dokumentu podczas przewijania zainicjowanego przez użytkownika i przywrócić go po przewinięciu strony przez przeglądarkę (na popstate). Działa to dobrze w przeglądarce Firefox 12, ale w przeglądarce Chrome 19 pojawia się migotanie spowodowane przewijaniem i przywracaniem strony. Zakładam, że ma to związek z opóźnieniem między przewijaniem a uruchomieniem zdarzenia przewijania (gdzie przywracana jest pozycja przewijania).
Firefox przewija stronę (i uruchamia zdarzenie przewijania) przed uruchomieniem funkcji popstate, a Chrome uruchamia najpierw polecenie popstate, a następnie przewija dokument.
Wszystkie strony, które widziałem, które używają API historii albo używają rozwiązania podobnego do tych powyżej, albo po prostu ignorują zmianę pozycji przewijania, gdy użytkownik przechodzi do tyłu / do przodu (np. GitHub).
Czy można w ogóle zapobiec przewijaniu dokumentu podczas zdarzeń popstate?
document.body.clientHeight
ale nie widziałem, żeby to działało we wszystkich przeglądarkach.