
Scroll-Scrubbed Visual Sequence
FreeCreate scroll-driven visual transformations seamlessly.
Free · Opens the source repo
What Scroll-Scrubbed Visual Sequence does
Scroll-Scrubbed Visual Sequence is a skill designed for developers and designers looking to create engaging, scroll-controlled visual experiences on the web. This skill allows you to define a sequence of visual states that can be triggered by the user's scroll position, making it ideal for applications like product showcases, interactive diagrams, and storytelling interfaces. By utilizing various renderers such as video, image sequences, canvas, SVG, or DOM elements, you can tailor the visual output to suit the specific needs of your project.
The skill emphasizes a normalized approach to scroll-based animations, ensuring that the visual state is directly tied to the native scroll position rather than relying on other factors like wheel delta or elapsed time. This approach not only enhances the user experience but also simplifies the implementation process. You can define your visual sequence using a straightforward configuration object, which includes parameters like scroll height, frame count, and copy stops, allowing for precise control over the animation.
Moreover, Scroll-Scrubbed Visual Sequence promotes accessibility and usability by keeping essential content in the document flow and ensuring that scrolling does not trap users. The skill also provides guidelines for handling media safely and optimizing performance, ensuring that your visual transformations are smooth and responsive across different devices and screen sizes. By following the provided best practices, you can create visually stunning scroll-driven experiences that engage users without compromising on performance or accessibility.
This skill is particularly suited for web developers and designers who want to enhance their projects with interactive visual elements. Whether you're building a product landing page or an educational tool, Scroll-Scrubbed Visual Sequence provides the necessary framework to implement scroll-based animations effectively and efficiently.
When to use it
Use this skill when you need to create interactive, scroll-controlled visual experiences that require precise synchronization with the user's scroll position.
When not to use it
This skill may not be suitable for projects that do not involve scroll-based interactions or require complex animations that go beyond the provided renderers.
What you can build with it
Product Showcase
Use this skill to create an interactive product showcase that visually demonstrates features as the user scrolls.
Educational Tool
Implement scroll-driven diagrams or animations to enhance learning experiences in educational web applications.
Storytelling Interface
Craft engaging narratives where visual elements change in response to the user's scrolling, creating a dynamic storytelling experience.
How to install Scroll-Scrubbed Visual Sequence
View source1. Install with the skills CLI
npx skills add mengto/skills/scroll-scrubbed-visual-sequence --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by mengtoScroll-Scrubbed Visual Sequence
Turn one visual transformation into a responsive scroll instrument. Keep the page usable without motion and keep the renderer replaceable.
Define the sequence
Write the visual states before coding:
const sequence = {
scrollVh: 280,
frameCount: 96,
fit: "contain",
posterFrame: 0,
reducedMotionFrame: 95,
copyStops: [0, 0.42, 0.78]
};
Use one normalized value for every renderer:
const progress = Math.min(1, Math.max(0,
(viewportTop - sectionTop) / (sectionHeight - viewportHeight)
));
Never make wheel delta, elapsed time, or autoplay the source of truth. Native scroll position must determine the exact visual state in both directions.
Choose the renderer
- Use video when the sequence is continuous, photographic, or expensive to render live. Encode frequent keyframes, preload metadata, reserve the aspect ratio, and coalesce
currentTimewrites inrequestAnimationFrame. - Use an image sequence when exact art-directed frames matter. Preload the current frame first, then nearby frames; never block first paint on the whole set.
- Use canvas for procedural drawing or compositing. Cap device pixel ratio at 2 and redraw only when progress changes.
- Use SVG or DOM for diagrams, product cards, interface states, and accessible text. Drive transforms, opacity, clip paths, and CSS variables instead of layout-heavy properties.
- Use WebGL only when depth, lighting, or a real 3D camera materially strengthens the idea. Provide a static poster and dispose resources.
Build the scroll stage
- Keep the section in normal document flow and set its height from
scrollVh. - Put the visual in a
position: stickystage sized to the viewport. - Keep copy and controls in a separate layer. Do not bake essential text into frames.
- Map progress to the renderer with no implicit easing. Add optional smoothing after correctness is proven.
- Refresh measurements after fonts and intrinsic media sizes settle.
- Release the sticky stage cleanly before the next section and keep the footer reachable.
Use GSAP ScrollTrigger when the project already uses GSAP or needs exact pin, refresh, and timeline coordination:
ScrollTrigger.create({
trigger: section,
start: "top top",
end: () => `+=${innerHeight * 2.8}`,
pin: stage,
scrub: true,
invalidateOnRefresh: true,
onUpdate: ({ progress }) => render(progress)
});
For a dependency-free implementation, measure the section on scroll and resize, then schedule one render per animation frame.
Handle media safely
- Keep a poster visible until the first real frame paints.
- Clamp frame indexes to
0...frameCount - 1. - Cancel stale image requests and never queue every seek during fast scrolling.
- Use
object-fitand an explicit focal point so the subject survives mobile crops. - Pause decoding, rendering, and observation while the section is offscreen or the document is hidden.
- Clean up ScrollTriggers, observers, listeners, animation frames, Blob URLs, and renderer resources on route change or unmount.
Preserve access and control
- Keep headings, copy, captions, and the CTA in semantic HTML.
- Do not trap scrolling, block keyboard navigation, or require precise pointer input.
- Under
prefers-reduced-motion: reduce, remove pinning and scrubbing, render the selected static frame, and restore ordinary document flow. - If the sequence communicates ordered information, expose the same states as text or a list.
Tune deliberately
Expose scroll distance, renderer, frame count, poster frame, media fit, focal point, copy stops, overlay strength, smoothing, and reduced-motion state as configuration. Avoid magic numbers distributed across event handlers.
Verify
Check forward and reverse scrolling, fast flicks, resize while active, 390/768/1024/1440 widths, unloaded frames, blocked video, reduced motion, keyboard order, route cleanup, and console errors. The same scroll position must always reproduce the same state.
Use demo/index.html as the working reference and demo/PROMPT.md to recreate or remix it. Keep REFERENCES.md as the links-only implementation source list.
Frequently asked questions about Scroll-Scrubbed Visual Sequence
Similar skills
Playwright Component Testing
Test React and Vue components in isolation with Playwright.
Fluent UI Blazor
Integrate Fluent UI components in Blazor applications effortlessly.
Build MCP App
Create interactive UI widgets for MCP servers.
Web Design Reviewer
Identify and fix design issues in websites efficiently.
Markstream Install
Seamlessly integrate Markstream for Markdown rendering.
GSAP & Framer Scroll Animation
Create advanced scroll animations effortlessly.
