Simple Parallax logo

Simple Parallax

Add subtle, high-performance parallax scrolling effects to images and videos with zero configuration.

npm install simple-parallax-js
2.1K6.1K/weekv6.3.317.28 MBMIT18 issues
Last updated: 2025-09-21
Star history chart for geosigno/simpleParallax.js

TL;DR

A lightweight React component that applies a subtle parallax effect to images and videos by scaling and translating them based on scroll position.

Unlike traditional parallax that moves elements, this creates a 'window' effect, perfect for editorial layouts and premium portfolios.

Why Simple Parallax?

Most "parallax" libraries move the entire DOM element, often causing layout shifts or misalignment. simple-parallax-js takes a different approach: it keeps the image container fixed in the document flow but applies a transformation to the image inside it. By scaling the image up slightly and translating it in the opposite direction of the scroll, it creates a convincing illusion of depth.

  • Editorial Aesthetic: Replicates the "overflow" parallax effect commonly seen on high-end magazine sites and Awwwards winners.
  • Zero Configuration: You don't need to calculate scroll offsets, viewport intersections, or percentage thresholds.
  • Media Focused: Specifically optimized for <img /> and <video /> tags.
  • Universal Support: Works with standard images and compatible with Next.js next/image (with some configuration).
  • Multiple Orientations: Supports scrolling effects in all directions (up, down, left, right, upright, etc.) to match your layout flow.

Code Snippet

The API is designed to be a thin wrapper around your existing media elements.

import SimpleParallax from 'simple-parallax-js';

const GalleryItem = () => {
  return (
    <div className="image-wrapper">
      {/* Wraps the image to apply the effect */}
      <SimpleParallax 
        orientation="right" 
        scale={1.5} 
        delay={0.4}
        transition="cubic-bezier(0,0,0,1)"
      >
        <img src="/landscape.jpg" alt="Mountain View" />
      </SimpleParallax>
    </div>
  );
};

In this example, as the user scrolls down, the image will subtly translate towards the right, creating a sense of movement and depth relative to the static text around it.

Pros and Cons

No library is perfect; understanding the trade-offs is key to selecting the right tool.

Pros

  • Visual Impact: Instantly makes a flat page feel premium and interactive.
  • Performance: Uses CSS 3D transforms (translate3d) for hardware-accelerated animations that don't cause repaints.
  • Ease of Use: No hooks to manage or scroll listeners to debounce; just wrap and go.

Cons

  • Limited Scope: It is strictly for media elements (img, video, picture). You cannot use it to parallax arbitrary divs or text blocks easily.
  • Layout Constraints: Because it scales the image (default 1.2x), you must ensure your layout handles the overflow or cropping correctly.
  • DOM Manipulation: It modifies the DOM structure around the image, which can sometimes conflict with complex CSS grid or flexbox setups if not wrapped in a container.

Comparison with Other Parallax Libraries

The table below outlines the positioning differences between Simple Parallax and general-purpose scroll libraries:

LibraryDesign PhilosophyBest ForPain Points
Simple ParallaxInternal Translate
Moves the image within its frame.
Media
Images and videos in editorial layouts.
Flexibility
Cannot be used for moving text or UI elements.
React Scroll ParallaxElement Position
Moves the entire DOM node based on scroll.
Composites
Creating complex, multi-layer parallax scenes.
Setup
Requires a ParallaxProvider and more configuration.
Framer MotionScroll Hook
Exposes useScroll for manual mapping.
Custom Logic
When you need exact control over every pixel.
Boilerplate
You must write the math to map scroll range to transform values.

Verdict: When to Adopt

Use Simple Parallax when your primary goal is to make images look cooler. It is the "cheat code" for making a portfolio or blog post look expensive. If you need to move text, shapes, or entire sections at different speeds to create a multi-plane 3D scene, this is the wrong tool—use React Scroll Parallax or Framer Motion instead.