useSpring
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.
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, })
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.
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, })
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.
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, })


