Scroll Animation for Framer: Adding Frame-by-Frame Scroll Sequences

Framer is animation-first — its scroll interactions are some of the best in the website builder space. But frame-by-frame, video-derived scroll animation still requires an embed. This guide shows you when to reach for ScrollerSites instead of Framer's built-in tools.

Manual Implementation
38 lines
// Manual scroll animation on Framer — 47+ lines before mobile
const canvas = document.getElementById('scroll-canvas');
const ctx = canvas.getContext('2d');
const frames = [];
let currentFrame = 0;

async function preloadFrames(count) {
  await Promise.all(Array.from({ length: count }, (_, i) => {
    const img = new Image();
    const padded = String(i).padStart(4, '0');
    img.src = `https://your-cdn.com/frames/frame-${padded}.jpg`;
    frames.push(img);
    return new Promise((r) => { img.onload = r; img.onerror = r; });
  }));
}

function drawFrame(index) {
  if (!frames[index]) return;
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.drawImage(frames[index], 0, 0, canvas.width, canvas.height);
}

window.addEventListener('scroll', () => {
  const rect = canvas.parentElement.getBoundingClientRect();
  const scrolled = -rect.top;
  const total = rect.height - window.innerHeight;
  const progress = Math.max(0, Math.min(1, scrolled / total));
  const frameIndex = Math.floor(progress * (frames.length - 1));
  if (frameIndex !== currentFrame) {
    currentFrame = frameIndex;
    requestAnimationFrame(() => drawFrame(currentFrame));
  }
}, { passive: true });

// Still needed: resize handler, mobile touch events,
// Safari canvas fix, Framer override code injection,
// CDN setup for 120+ JPEG files, lazy loading...
preloadFrames(120).then(() => drawFrame(0));

Framer's Built-In Scroll Animation

Framer supports scroll-tied animation through its overrides API and the Scroll component. You can do parallax, scroll-linked transforms, and timeline scrubbing. For developers comfortable in code, you can build almost anything.

  • Framer Scroll component for parallax and section reveals
  • Override API for advanced scroll-linked animation
  • Custom code components for full control

When to Use ScrollerSites in Framer

If your scroll animation source is a video — a 3D render, a product rotation, a process walkthrough — ScrollerSites extracts the frames and hosts them on a CDN. Drop a Framer Embed component, paste the snippet, done. You skip the override-API learning curve.

  • Use ScrollerSites when the animation is video-derived
  • Use ScrollerSites when you need cross-platform frame sequences (animated on Framer + Shopify + WordPress with the same embed)
  • Use Framer overrides when the animation is UI-derived (text, icons, layered components)

Ready to Add Scroll Animation?

Skip the override-API learning curve — get cinematic scroll animation in Framer with two lines of HTML.

Get Started Free →

Related Platform Guides

Related Articles