Verhindert das Scrollen des Browsers in HTML5 History Popstate

Ist es möglich, das Standardverhalten des Bildlaufs im Dokument zu verhindern, wenn ein Popstate-Ereignis auftritt?

Unsere Site verwendet jQuery-animiertes Scrollen und History.js, und Statusänderungen sollten den Benutzer über Push- oder Popstate zu verschiedenen Bereichen der Seite führen. Das Problem ist, dass der Browser die Bildlaufposition des vorherigen Status automatisch wiederherstellt, wenn ein Popstate-Ereignis auftritt.

Ich habe versucht, ein Containerelement zu verwenden, das auf 100% Breite und Höhe des Dokuments eingestellt ist, und den Inhalt in diesem Container zu scrollen. Das Problem dabei ist, dass es nicht annähernd so reibungslos zu sein scheint wie das Scrollen des Dokuments. vor allem, wenn Sie viele CSS3 wie Box-Schatten und Farbverläufe verwenden.

Ich habe auch versucht, die Bildlaufposition des Dokuments während eines vom Benutzer eingeleiteten Bildlaufs zu speichern und wiederherzustellen, nachdem der Browser die Seite gescrollt hat (auf popstate). Dies funktioniert in Firefox 12 einwandfrei, in Chrome 19 blinkt es jedoch, weil die Seite gescrollt und wiederhergestellt wird. Ich gehe davon aus, dass dies mit einer Verzögerung zwischen dem Bildlauf und dem auszulösenden Bildlaufereignis zusammenhängt (wobei die Bildlaufposition wiederhergestellt wird).

Firefox führt einen Bildlauf auf der Seite durch (und löst das Bildlaufereignis aus), bevor Popstate ausgelöst wird und Chrome zuerst Popstate auslöst und dann einen Bildlauf im Dokument durchführt.

Alle von mir gesehenen Websites, die die Verlaufs-API verwenden, verwenden entweder eine ähnliche Lösung wie oben oder ignorieren einfach die Änderung der Bildlaufposition, wenn ein Benutzer vor- oder zurückspringt (z. B. GitHub).

Kann verhindert werden, dass das Dokument bei Popstate-Ereignissen gescrollt wird?

Antworten auf die Frage(11)

Ihre Antwort auf die Frage