Ist es möglich, das Standardverhalten beim Scrollen des Dokuments zu verhindern, wenn ein Popstate-Ereignis auftritt?
Unsere Website verwendet jQuery-animiertes Scrollen und History.js. Statusänderungen sollten den Benutzer über Pushstate 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 viel CSS3 wie Box-Shadows und Farbverläufe verwenden.
Ich habe auch versucht, die Bildlaufposition des Dokuments während eines vom Benutzer initiierten Bildlaufs zu speichern und wiederherzustellen, nachdem der Browser die Seite gescrollt hat (im Popstate). Dies funktioniert in Firefox 12 einwandfrei, in Chrome 19 tritt jedoch ein Flimmern auf, da die Seite gescrollt und wiederhergestellt wird. Ich gehe davon aus, dass dies mit einer Verzögerung zwischen dem Bildlauf und dem ausgelösten Bildlaufereignis zu tun hat (bei dem die Bildlaufposition wiederhergestellt wird).
Firefox scrollt die Seite (und löst das Bildlaufereignis aus), bevor Popstate ausgelöst wird und Chrome zuerst Popstate auslöst und dann das Dokument scrollt.
Alle Websites, die ich gesehen habe und die die Verlaufs-API verwenden, verwenden entweder eine ähnliche Lösung wie oben oder ignorieren einfach die Änderung der Bildlaufposition, wenn ein Benutzer vor / zurück geht (z. B. GitHub).
Ist es möglich zu verhindern, dass das Dokument bei Popstate-Ereignissen überhaupt gescrollt wird?
document.body.clientHeight
aber ich habe nicht gesehen, dass es in allen Browsern funktioniert.