Documentation

Documentation

JavaScript

attrEffect

attrEffect

attrEffect applies the output of motion values to the attributes of one or more elements.

When these motion values update, the element will re-render once per frame during the render step of the frameloop.

const width = motionValue(100)

attrEffect("rect", { width })

attrEffect will automatically handle casing for aria and data attributes, converting camel case to kebab case.

const value = motionValue("#fff")

attrEffect(counter, {
  ariaValuenow: value,
  dataValue: value
})

// <div aria-valuenow="#fff" data-value="#fff">

It will also dynamically set attributes via their JavaScript setter, if available, for improved type-safety and performance.

Usage

Import attrEffect from "motion":

import { attrEffect } from "motion"

attrEffect accepts an element, list of elements, or CSS selector, plus a map of motion values:

const progress = motionValue(0.5)

attrEffect("#progress", { "data-progress": progress })

When any of the motion values update, the element(s) will re-render on the next animation frame:

progress.set(1)
animate(progress, 1)

Each motion value can be applied to any number of attributes, on any number of elements.

Any motion value can be provided, including those defined by mapValue and transformValue.

Cancel

attrEffect returns a cleanup function which, when called, will stop applying changes to the motion values to the element:

const cx = motionValue(0)
const cy = motionValue(0)
const cancel = attrEffect("circle", { cx, cy })

cancel()

attrEffect applies the output of motion values to the attributes of one or more elements.

When these motion values update, the element will re-render once per frame during the render step of the frameloop.

const width = motionValue(100)

attrEffect("rect", { width })

attrEffect will automatically handle casing for aria and data attributes, converting camel case to kebab case.

const value = motionValue("#fff")

attrEffect(counter, {
  ariaValuenow: value,
  dataValue: value
})

// <div aria-valuenow="#fff" data-value="#fff">

It will also dynamically set attributes via their JavaScript setter, if available, for improved type-safety and performance.

Usage

Import attrEffect from "motion":

import { attrEffect } from "motion"

attrEffect accepts an element, list of elements, or CSS selector, plus a map of motion values:

const progress = motionValue(0.5)

attrEffect("#progress", { "data-progress": progress })

When any of the motion values update, the element(s) will re-render on the next animation frame:

progress.set(1)
animate(progress, 1)

Each motion value can be applied to any number of attributes, on any number of elements.

Any motion value can be provided, including those defined by mapValue and transformValue.

Cancel

attrEffect returns a cleanup function which, when called, will stop applying changes to the motion values to the element:

const cx = motionValue(0)
const cy = motionValue(0)
const cancel = attrEffect("circle", { cx, cy })

cancel()

attrEffect applies the output of motion values to the attributes of one or more elements.

When these motion values update, the element will re-render once per frame during the render step of the frameloop.

const width = motionValue(100)

attrEffect("rect", { width })

attrEffect will automatically handle casing for aria and data attributes, converting camel case to kebab case.

const value = motionValue("#fff")

attrEffect(counter, {
  ariaValuenow: value,
  dataValue: value
})

// <div aria-valuenow="#fff" data-value="#fff">

It will also dynamically set attributes via their JavaScript setter, if available, for improved type-safety and performance.

Usage

Import attrEffect from "motion":

import { attrEffect } from "motion"

attrEffect accepts an element, list of elements, or CSS selector, plus a map of motion values:

const progress = motionValue(0.5)

attrEffect("#progress", { "data-progress": progress })

When any of the motion values update, the element(s) will re-render on the next animation frame:

progress.set(1)
animate(progress, 1)

Each motion value can be applied to any number of attributes, on any number of elements.

Any motion value can be provided, including those defined by mapValue and transformValue.

Cancel

attrEffect returns a cleanup function which, when called, will stop applying changes to the motion values to the element:

const cx = motionValue(0)
const cy = motionValue(0)
const cancel = attrEffect("circle", { cx, cy })

cancel()

Level up your animations with Motion+

More than 150+ Motion 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.