Documentation

Documentation

JavaScript

springValue

springValue

springValue creates a new motion value that reacts to changes with a physics-based spring animation.

springValue either accepts a number:

const x = springValue(0)
const y = springValue("100%")

// These will go to their new target with a spring animation
x.set(100)
y.set("0%")

styleEffect("div", { x, y })

Or another motion value:

const pointerX = motionValue(0)
const x = springValue(pointerX)

document.addEventListener("pointerMove", (e) => {
  // x will animate these changes with a spring animation
  pointerX.set(e.clientX)
})

styleEffect("div", { x })

Usage

springValue accepts either a number value or a motion value.

Number

A number can be provided with or without a unit:

import { springValue } from "motion"

const scaleX = springValue(0)
const rotate = springValue("1turn")

When we've provided a number, we can animate the returned motion value by calling its .set()

scaleX.set(1)
rotate.set("2turn")

Motion value

Alternatively, we can attach a spring onto another motion value by passing it to springValue:

const opacity = motionValue(1)
const x = mapValue(opacity, [0, 1], [0, 100])
const xWithSpring = springValue(x)

Options

All of the normal Motion spring options are supported via a second argument.

springValue(0, { stiffness: 1000 })

Note: Although duration and visualDuration are accepted, it's recommended to define springs using the physics-based options stiffness, damping and mass. This is because these options incorporate the velocity of the value for the smoothest and most reactive motion.

springValue creates a new motion value that reacts to changes with a physics-based spring animation.

springValue either accepts a number:

const x = springValue(0)
const y = springValue("100%")

// These will go to their new target with a spring animation
x.set(100)
y.set("0%")

styleEffect("div", { x, y })

Or another motion value:

const pointerX = motionValue(0)
const x = springValue(pointerX)

document.addEventListener("pointerMove", (e) => {
  // x will animate these changes with a spring animation
  pointerX.set(e.clientX)
})

styleEffect("div", { x })

Usage

springValue accepts either a number value or a motion value.

Number

A number can be provided with or without a unit:

import { springValue } from "motion"

const scaleX = springValue(0)
const rotate = springValue("1turn")

When we've provided a number, we can animate the returned motion value by calling its .set()

scaleX.set(1)
rotate.set("2turn")

Motion value

Alternatively, we can attach a spring onto another motion value by passing it to springValue:

const opacity = motionValue(1)
const x = mapValue(opacity, [0, 1], [0, 100])
const xWithSpring = springValue(x)

Options

All of the normal Motion spring options are supported via a second argument.

springValue(0, { stiffness: 1000 })

Note: Although duration and visualDuration are accepted, it's recommended to define springs using the physics-based options stiffness, damping and mass. This is because these options incorporate the velocity of the value for the smoothest and most reactive motion.

springValue creates a new motion value that reacts to changes with a physics-based spring animation.

springValue either accepts a number:

const x = springValue(0)
const y = springValue("100%")

// These will go to their new target with a spring animation
x.set(100)
y.set("0%")

styleEffect("div", { x, y })

Or another motion value:

const pointerX = motionValue(0)
const x = springValue(pointerX)

document.addEventListener("pointerMove", (e) => {
  // x will animate these changes with a spring animation
  pointerX.set(e.clientX)
})

styleEffect("div", { x })

Usage

springValue accepts either a number value or a motion value.

Number

A number can be provided with or without a unit:

import { springValue } from "motion"

const scaleX = springValue(0)
const rotate = springValue("1turn")

When we've provided a number, we can animate the returned motion value by calling its .set()

scaleX.set(1)
rotate.set("2turn")

Motion value

Alternatively, we can attach a spring onto another motion value by passing it to springValue:

const opacity = motionValue(1)
const x = mapValue(opacity, [0, 1], [0, 100])
const xWithSpring = springValue(x)

Options

All of the normal Motion spring options are supported via a second argument.

springValue(0, { stiffness: 1000 })

Note: Although duration and visualDuration are accepted, it's recommended to define springs using the physics-based options stiffness, damping and mass. This is because these options incorporate the velocity of the value for the smoothest and most reactive motion.

Level up your animations with Motion+

Access to 100+ premium examples, exclusive APIs like Cursor, private Discord and GitHub, and powerful VS Code animation editing tools.

One-time payment, lifetime updates.

Stay in the loop

Subscribe for the latest news & updates.

Stay in the loop

Subscribe for the latest news & updates.