/ Docs

Snapshots #

Save and restore scroll position across SPA navigation and list recreation.

import { createVList, snapshots } from "vlist";

const list = createVList({
  container: "#app",
  item: { height: 48, template: renderItem },
  items: data,
}, [snapshots({ autoSave: "my-list-scroll" })]);

Config #

Option Type Default Description
autoSave string Session storage key for auto-save/restore
restore ScrollSnapshot Restore from a snapshot object

Methods #

Method Description
getScrollSnapshot() Capture current scroll and selection state
restoreScroll(snapshot, restoreSelection?) Restore from a snapshot

Manual Save/Restore #

// Save before navigating away
const snapshot = list.getScrollSnapshot();
sessionStorage.setItem("scroll", JSON.stringify(snapshot));

// Restore on return
const saved = JSON.parse(sessionStorage.getItem("scroll"));
const list = createVList(config, [snapshots({ restore: saved })]);

Notes #

  • Captures: scroll position, first visible item index, sub-pixel offset, selection state, focus
  • Survives compression mode changes (scale plugin)
  • Works with async data — polls until container is ready, then restores