Unlock Lifetime Full Access 50% off

Sections / Gems / Scroll and type effects

Lens Index

A long list of names (clients, projects, places) seen through a lens. The row in the middle of the box swells and the rows around it make room, like type under a magnifier, while its picture slides in from the edge and leans with the scroll speed. A whole archive in one section: scroll it, click a name or walk it with the arrow keys.

Included with Full Access
Open the demo
Lens Index: six frames of the gem in motion
Kind
Scroll and type effects
Interaction
scroll · fisheye type · image reveal · keyboard · links · real list
Dependencies
None
Licence
Licensed with Full Access, for the sites you build; do not resell the gem itself

Formats

  • Webflow (native)
  • Figma (layers)
  • Framer component
  • HTML
  • Prompts for Claude Code, Cursor, Lovable, v0, Bolt

Copy to Webflow pastes a native section with the gem in an Embed inside it. Copy to Figma pastes a frame of its best moment, text and controls as layers. Copy to Framer pastes a component with its options as controls. HTML is one self-contained snippet. Each prompt (Claude Code, Cursor, Lovable, v0, Bolt) carries the exact files, so your agent installs this gem, not a lookalike. With the MCP server, ask your agent for get_section("lens-index").

Behaviour and accessibility

  • It is a real ordered list of buttons (or links, when items have an href): the middle row is the one Tab reaches, arrow keys, Page Up and Down, Home and End walk the list, and the middle row carries aria-current.
  • Scrolling uses the browser's own scroll inside the box, so wheels, trackpads and touch work as usual and the page carries on once the list ends; it settles on the nearest row when you stop.
  • A link row only follows on the second click, once it is in the middle, so the first click always shows its picture.
  • Drawing stops as soon as the list is still, and entirely off screen or in a background tab.
  • With prefers-reduced-motion: rows jump to the middle, pictures cut, and the panel does not lean.

Options

OptionTypeDefaultWhat
itemsLensItem[]12 built inThe rows, in order.
magnifynumber2.6How much the middle row grows over the others.
snapbooleantrueSettle on the nearest row when scrolling stops.
theme'dark' | 'light'"dark"Colour scheme.
controlsbooleantrueShow the counter in the corner.
labelstring"Index"Accessible name of the list.
startIndexnumber0Row centred first.
onChange(index: number) => voidCalled when another row reaches the middle.