Motion+
DocsReact

useSpring

A spring-powered motion value. Standalone, or attached to another motion value.

useSpring creates a motion value that will animate to its latest target with a spring animation.

The target can either be set manually via .set, or automatically by passing in another motion value.

>Live exampleOpen

Usage

Import useSpring from Motion:

import { useSpring } from "motion/react"

Direct control

useSpring can be created with a number, or a unit-type (px, % etc) string:

const x = useSpring(0)
const y = useSpring("100vh")

Now, whenever this motion value is updated via set(), the value will animate to its new target with the defined spring.

x.set(100)
y.set("50vh")

It's also possible to update this value immediately, without a spring, with the jump() method.

x.jump(50)
y.jump("0vh")

Track another motion value

Its also possible to automatically spring towards the latest value of another motion value:

const x = useMotionValue(0)
const y = useSpring(x)

This source motion value must also be a number, or unit-type string.

Transition

The type of spring can be defined with the usual spring transition option.

useSpring(0, { stiffness: 300 })

Options

As well as transition options, useSpring also accepts the following options.

skipInitialAnimation

Default: false

When using useSpring to track a value like useScroll, which may change on mount after a DOM measurement, you can jump to this value instantly by setting skipInitialAnimation to true.

const { scrollYProgress } = useScroll()
const smoothProgress = useSpring(scrollYProgress, {
  skipInitialAnimation: true,
})

Visual editing for IDEs.

Edit and preview Motion and CSS transitions live in your code. Tune ease curves, springs, and durations without leaving your editor.

Part of Motion+. One-time fee, lifetime access.