基本
なぜ、ハッシュではスムーススクロールが不可能か
- ことの発端
前回の概要では、”同じページ内ではアンカーにハッシュを記述してもスムーススクロールできるが、別ページからの遷移ではハッシュ付きのURLは、いきなり該当コンテンツが表示されスムーススクロールされない”と解説しました。
それでも、無理やりリセットしてスムーススクロールする方法はあるが、意味ないので解説しないとしました。
が、よくよく考えるとヘッダのリンク記述をハッシュで統一できるのは小さいけどメリットでもあるかもしれないし、ひとつ解説するかとなりました。
まあ、前回の手法で統一してしまえばそういう問題もないですし、もちろん私には無用ですが爆。
まずはハッシュ付きのURLをブラウザが処理する流れの解説
ページを跨ぐときのブラウザの処理の流れは下記になります。
1.ページ遷移
2.ページ読み込み開始
3.ブラウザが hash を検出
4.即スクロール
5.JS実行
つまりJSが制御する前にブラウザがハッシュのリクエストを終了させているわけです。JS実行前にすでに評価されてるわけです。
そもそもハッシュによるスクロールはHTML Standard の “navigate to a fragment” アルゴリズムに含まれるブラウザの標準処理です。
歴史的にもCSSやJSが導入される前から存在していた仕様でもあり、ブラウザは最優先で処理します。JSよりも早く、CSSよりも優先されるのです。