Scroll Velocity Skew

£5

Kinetic type that smears with scroll speed (shear, stretch, motion blur and chromatic fringing in one velocity-driven response) then whips back line by line with an elastic overshoot.

ScrollTrigger Lenis intermediate
4 more details
velocity-reactivetext-animationchromatic-aberrationquickTo
Scroll Velocity Skew - GSAP animation effect preview

This demo reads better at your own screen size than in the frame below:

About this effect

A velocity-reactive smear effect that makes a page feel physically connected to the scroll wheel. Flick hard and headlines deform in proportion to speed: they shear, stretch vertically, blur like a long-exposure frame and split into cyan and warm-red chromatic fringes, all driven by one velocity reading so every channel peaks and releases in phase. Let go and the stack whips back with an elastic overshoot, each line springing to rest a beat after the one above it, like a spring chain.

Read the full effect overview

Everything tunes through data attributes on the group: mode (skew, stretch or both), max angle, strength, settle time, blur amount, fringe on/off, alternating per-line shear for a wave feel, and counter-directional scatter for grids. The filter channels are automatically gated to fine pointers, so phones keep the full transform response at 60fps while desktops get the complete smear. Off-screen groups cost nothing because each group's tracking only runs while it is in the viewport.

What's included

10 items
  • Velocity-driven shear with a hard configurable cap, layered with vertical stretch in 'both' mode
  • Velocity-proportional motion blur (up to 6px) and chromatic fringing (cyan one side, warm red the other) that split wider with speed
  • Elastic staggered settle: each line springs back with back.out overshoot 70ms after the one above, so stacks whip like a spring chain
  • Alternating per-line shear direction so a flick travels through a stack as a wave, not a block tilt
  • Counter-directional scatter for grids: odd tiles pull one way, even tiles the other, proportional to velocity
  • Peak-hold velocity tracking: a new reading is only accepted when it beats the settling value, so the smear never snaps smaller mid-release
  • Filter channels gated to fine pointers automatically: phones keep the full transform response without filter repaints
  • Per-group tuning through eight data attributes, no JavaScript edits needed
  • Works with native scroll or Lenis smooth scroll, no configuration difference
  • Reduced-motion users see fully static, untransformed content

Perfect for

5 use cases
  • Portfolio and agency sites where oversized headlines smear under a hard flick
  • Landing pages that want the 'the page has mass' feel of award-site scrolling
  • Image and video grids that stretch and scatter against each other under fast scrolling
  • Editorial layouts with kinetic pull-quotes that lean as readers skim
  • Case-study pages pairing calm layouts with one velocity-reactive signature moment

How it works

2 sections

Each group gets one ScrollTrigger spanning its time on screen, reading scroll speed, scaling it by the group's strength and clamping it to the configured maximum angle. Each line holds its own peak: a new reading is only accepted when it exceeds the value that line is still settling from, at which point it springs back to zero with a slight overshoot, delayed 70ms per line so the release cascades down the stack.

One speed value drives every channel on a line: the skew (sign-flipped on odd lines when alternating), a vertical squash and a counter-directional scatter, while blur and a cyan/red fringe come off the same value on fine pointers only, keeping phones on transforms the compositor handles cheaply. Reduced-motion visitors get a branch that clears all transforms and filters and never creates the triggers at all.

Plugins ScrollTrigger
Difficulty Intermediate
Smooth scroll Lenis integration
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Paid effect

Purchase to unlock the code.

Buying Scroll Velocity Skew opens the HTML, CSS and JavaScript source, the full documentation, an AI setup prompt for your editor, and every update we ship to it. Standard license: unlimited personal and commercial projects.

£5 Standard license, unlimited projects

Browse free effects

Documentation

Quick Start

1. Add to your HTML <head>:

Code snippet omitted: it ships with the download.

2. Add before closing </body> tag:

Code snippet omitted: it ships with the download.

3. Add the effect HTML anywhere in your <body>:

Code snippet omitted: it ships with the download.

Every element with data-velocity-item inside the group deforms with scroll speed. If a group contains no data-velocity-item elements, the group element itself is transformed.

Options

All options go on the data-velocity-skew group element.

Attribute Values Default Description
data-velocity-mode skew, stretch, both skew skew shears (best for type), stretch scales vertically (best for media), both layers a full skew with a subtle stretch — the signature smear
data-velocity-max Any number (degrees) 10 Hard cap on the shear angle. Above ~14 text reads as broken rather than fast
data-velocity-strength Any number 1 Velocity multiplier. 1 reaches the cap at a hard flick (~4000px/s); 2 reaches it at a lazy scroll
data-velocity-settle Seconds 0.7 How long each item takes to spring back. The settle uses back.out, so items overshoot rest slightly — the elastic snap. Below ~0.3 it reads as a glitch
data-velocity-blur Max px (0–6) 0 (off) Motion blur at the velocity cap, scaling with speed. Capped at 6px: beyond that glyphs dissolve into fog. Fine pointers only
data-velocity-fringe true, false false Chromatic fringing: a cyan shadow splits one way and a warm red one the other, wider and more opaque with speed. Fine pointers only
data-velocity-alternate true, false false Odd items shear the opposite way, so a flick travels through the stack as a wave instead of tilting it as one block. Skew channel only
data-velocity-shift Max px 0 (off) Counter-directional scatter: odd items translate one way, even items the other, proportional to velocity. Made for grids

How the Settle Works

On every scroll frame the effect reads velocity and holds the peak: a new reading is only accepted when it exceeds the value an item is still settling from, so a slow frame never snaps the smear smaller. When you stop, each item springs back to rest with back.out — overshooting slightly past zero — and each item starts 70ms after the one before it, so a stack whips like a spring chain, top line first.

Performance Notes

  • Blur and chromatic fringe only run on fine pointers (pointer: fine). Transforms are compositor-cheap, per-frame filter repaints are not; phones keep the full skew, stretch, wave and scatter and skip the filters. This gating is built in — no configuration needed.
  • Give transformed elements will-change: transform (add , filter if you enable blur); the demo stylesheet does this for .headline.
  • Each group's velocity tracking only runs while the group is inside the viewport, so groups further down the page cost nothing until they arrive.
  • Rendering uses gsap.quickSetter per item: one velocity value drives many cheap writes, so a group with dozens of items stays smooth at speed.
  • The chromatic fringe is a JS-driven text-shadow, so it needs no duplicate markup and paints in the same pass as the text.
  • Skewed glyphs extend past their line box. If a full-width headline sits near the viewport edge, give it a little horizontal padding or you may see brief horizontal overflow at high velocity.

Accessibility

  • Reduced motion: with prefers-reduced-motion: reduce, no triggers are created, no transforms or filters are applied, and content renders fully static.
  • No hidden content: the effect never changes opacity or visibility; without JavaScript the page is simply still.
  • Non-interactive: the effect adds no interactive elements, so there is nothing extra to reach by keyboard.

Works With Lenis

If Lenis is on the page the script picks it up automatically and forwards its scroll events to ScrollTrigger; velocity readings are identical either way. Delete the Lenis block at the top of script.js if you want to guarantee native scrolling only.

Dependencies

Required:

  • GSAP 3.12+
  • ScrollTrigger plugin

Optional:

  • Lenis (smooth scroll integration)

Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.

Your cart

Your cart is empty

The Vault £99

Every effect, template and UI element: 165 today, plus everything we release next.