popstateイベントが発生したときにドキュメントをスクロールするデフォルトの動作を防ぐことは可能ですか?
私たちのサイトはjQueryアニメーションスクロールとHistory.jsを使用しており、状態の変更により、pushstateまたはpopstateを介して、ページのさまざまな領域にユーザーをスクロールする必要があります。問題は、popstateイベントが発生すると、ブラウザが前の状態のスクロール位置を自動的に復元することです。
ドキュメントの幅と高さを100%に設定したコンテナ要素を使用して、そのコンテナ内のコンテンツをスクロールしてみました。私が見つけた問題は、ドキュメントのスクロールほどスムーズではないように見えることです。特にボックスシャドウやグラデーションのようなcss3をたくさん使用する場合。
また、ユーザーがスクロールを開始したときにドキュメントのスクロール位置を保存し、ブラウザーがページをスクロールした後にドキュメントを復元しようとしました(popstateで)。これはFirefox12では正常に機能しますが、Chrome 19では、ページがスクロールされて復元されるためにちらつきがあります。これは、スクロールとスクロールイベントが発生するまでの遅延(スクロール位置が復元される場所)に関係していると思います。
Firefoxはpopstateが起動する前にページをスクロールし(そしてscrollイベントを起動し)、Chromeは最初にpopstateを起動してからドキュメントをスクロールします。
履歴APIを使用している私が見たすべてのサイトは、上記と同様のソリューションを使用するか、ユーザーが前後に移動したときのスクロール位置の変更を無視します(GitHubなど)。
popstateイベントでドキュメントがスクロールされないようにすることは可能ですか?
document.body.clientHeight
、すべてのブラウザで機能することは確認していません。