SPAのこと調べてて、次のスライド見てました。
まだ DOM 操作で消耗してるの?
それで、初めて history.pushState()
の存在を知りました。これ使うと、ページ遷移しなくてもブラウザの「戻る」の履歴を増やせるらしいです。そして実際に「戻る」が押されたときには、popstate
イベントを使ってページの状態をハンドリングできるみたいです。
ブラウザの履歴を操作する - ウェブデベロッパーガイド | MDN
↑のページ読みながら、サンプル書いてみました。
See the Pen
pushstate-and-popstate by napoporitataso (@napoporitataso)
on CodePen.
ここではあらかじめHTMLに全ての画面の内容を書いておき、リンクが踏まれた時に href
を見て、画面に対応する要素の表示/非表示を切り替えているだけです。state
には画面の識別子を持たせており、どの画面を表示するかはそれで判断しています。
Note
なお、これだけだとブラウザで画面をリロードしたりURLを直接指定してアクセスした時に、URLに対応するファイルが実在しないので画面を表示できません。
そのためサーバー側で .htaccess
などを使用して全てのアクセスを index.html
に集めるといった、フォールバック的な動きをさせる必要があります。