StealThis .dev

Streaming — Player Control Bar

A cinematic dark-first player control bar for the fictional Nebula streaming service, built in HTML, CSS, and vanilla JS. A draggable scrubber shows buffered range and a hover thumbnail tooltip with timecode, beside play and pause, skip ten, previous and next episode, a slide-out volume slider, captions, a multi-level quality and speed settings menu, picture-in-picture, and fullscreen. The chrome auto-hides during playback, an up-next chip surfaces near the end, and full keyboard shortcuts drive every control.

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

Code

Player Control Bar

A standalone streaming player control bar for Nebula, a fictional service. A gradient-scrim billboard stands in for the video, with a center play button, a back arrow, episode title, and a quality badge across the top. Once playing, the chrome auto-hides after a couple of seconds and the cursor disappears, returning the moment you move the pointer or press a key. Clicking the bare video area toggles playback, and a faux buffering spinner flashes whenever you jump across the timeline.

The bottom bar carries the full control set. The scrubber drags with a pointer, paints a lighter buffered range behind the red played portion, and floats a thumbnail tooltip with a live timecode as you hover or drag. To its left sit play/pause, previous/next episode, skip-ten controls, a volume button whose slider slides open on hover, and a tabular time readout. To the right are captions, a settings menu, picture-in-picture, and fullscreen — plus an Up next chip that appears as the episode nears its end. The settings menu drills from a root list into Quality, Speed, Audio, and Subtitles sub-pages with radio selection and a back button.

Everything is vanilla JS with no dependencies. The scrubber and volume slider are real ARIA sliders with keyboard support; Space/K toggle playback, arrows seek and adjust volume, and M, C, and F map to mute, captions, and fullscreen. A shared toast() helper confirms every illustrative action, the layout reflows to a mobile-first control set down to ~360px, and all motion is disabled under prefers-reduced-motion.

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