StealThis .dev

Streaming — Carousel Row

A reusable cinematic content carousel for streaming UIs. Landscape poster cards with quality badges, top-rank numbers, match scores and continue-watching progress bars scroll horizontally with snap, fading hover arrows, drag-to-scroll, lazy-loaded poster art, pagination dots that track position, and an explore-all end card. Built dark-first with pure vanilla JavaScript and CSS variables, fully keyboard navigable and responsive down to mobile widths.

Open in Lab
html css vanilla-js
Targets: JS HTML

Code

A drop-in content row for a streaming home screen. Each row has a title, a position-aware set of pagination dots, a “See all” shortcut, and a horizontally scrolling track of landscape poster cards. Cards carry HD/4K quality badges, a top-three rank number, a green match score, genre and year, and a red continue-watching progress bar where relevant. Poster art is generated as lightweight gradient artwork and lazy-loaded through an IntersectionObserver, with a shimmering skeleton standing in until each card scrolls into view.

Interaction is the focus. Left and right arrows fade in only on hover and disable themselves at the ends of the track. The scroll snaps to card edges, supports click-and-drag (pointer events with capture, plus snap-back and click suppression after a real drag), and responds to arrow keys when the track is focused. Pagination dots highlight the current page as you scroll and let you jump between pages, all throttled with requestAnimationFrame. Hovering a card scales and lifts it with a soft glow; activating any card or the explore-all end card fires a toast.

Everything is dark-first and token-driven: colors, radii and shadows live in :root, the layout collapses gracefully to a mobile-first single-hand view at 520px, and every interactive element is reachable and operable from the keyboard with proper ARIA roles and labels.

Illustrative UI only — fictional titles, not a real streaming service.