コンポーネント
← すべてのコンポーネント

スクロール位置の保持

stimeo--scroll-restore

内部スクロール領域の位置を Turbo 遷移をまたいで保存・復元する。

  • Rails / Turbo

stimeo--scroll-restore コントローラに APG ウィジェットパターンはなく、純粋な状態保持ユーティリティである。Turbo は遷移ごとに body を差し替えるため、内部のスクロール領域は scrollTop が 0 に戻る。これを各アプリで手書きせずに済むよう、スクロール量を安定したキーで sessionStorage に保存し connect 時に復元する。これにより Turbo Drive 遷移でも、タブセッション内のフルリロードでも復元される。key(無ければ要素の id)で名前空間を分けるため複数インスタンスでも衝突しない。scroll リスナは内部・passive で requestAnimationFrame によりまとめられ、disconnect(Turbo 遷移含む)で同期保存(flush)する。axis は vertical / horizontal / both を選べる。ARIA/CSS は操作せず、フォーカスも移動しない。

実行中

両方のリストをスクロールしてから「再構築」を押す。左(stimeo--scroll-restore あり)は元の位置に戻り、右(なし)は先頭にリセットされる——Turbo 遷移で内部スクロール領域に起きることと同じ。実際のページ遷移やブラウザのリロード(同一タブセッション内)でも位置は保持される。

Scroll Restore あり

  1. 行 1
  2. 行 2
  3. 行 3
  4. 行 4
  5. 行 5
  6. 行 6
  7. 行 7
  8. 行 8
  9. 行 9
  10. 行 10
  11. 行 11
  12. 行 12
  13. 行 13
  14. 行 14
  15. 行 15
  16. 行 16
  17. 行 17
  18. 行 18
  19. 行 19
  20. 行 20

なし(素のまま)

  1. 行 1
  2. 行 2
  3. 行 3
  4. 行 4
  5. 行 5
  6. 行 6
  7. 行 7
  8. 行 8
  9. 行 9
  10. 行 10
  11. 行 11
  12. 行 12
  13. 行 13
  14. 行 14
  15. 行 15
  16. 行 16
  17. 行 17
  18. 行 18
  19. 行 19
  20. 行 20