Communitygithub.com

phido0410/animejs

Habilidades de Anime.js v4 (animate, createTimeline, stagger, svg.createDrawable / morphTo / createMotionPath, createScope, utils). Úsalo cuando el usuario solicite Anime.js / animejs, o para animación JS ligera de DOM, SVG, variables CSS u objetos JS planos. La API de v4 difiere de v3 — no existe exportación por defecto anime().

¿Qué es animejs?

Esta habilidad proporciona acceso directo a la biblioteca Anime.js v4 (última versión 4.5, verificada en octubre de 2026) para crear animaciones ligeras en JavaScript. Permite animar propiedades de DOM, SVG, variables CSS, objetos JS planos y trabajar con timelines, efectos escalonados y utilidades de SVG como dibujo, morphing y trayectorias de movimiento. Incluye funciones avanzadas como `createScope` para encapsular animaciones en React y `autoplay: false` para control manual de reproducción y scrubbing. Es útil siempre que el usuario pida Anime.js, animejs o necesite animaciones declarativas y potentes sin dependencias pesadas. La API de v4 cambió significativamente respecto a v3, eliminando la exportación por defecto `anime()` y renombrando opciones como `easing` a `ease`, por lo que esta habilidad guía en la sintaxis correcta. También incluye consejos para integrar con Remotion, usando el timeline con `seek` por fotograma en lugar de autoplay.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/phido0410/claude-video-skills/tree/HEAD/skills/animejs

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Anime.js v4

Verificado en octubre de 2026: animejs 4.5.

npm i animejs
import { animate, createTimeline, stagger, svg, utils, createScope } from 'animejs'

v3 → v4 (los tutoriales antiguos usan v3)

v3v4
anime({ targets, ... })animate(targets, { ... })
easing: 'easeOutQuad'ease: 'outQuad' ('inOutExpo', 'inOut(3)', ...)
anime.timeline()createTimeline()
direction: 'alternate'alternate: true
update, complete, beginonUpdate, onComplete, onBegin

Las duraciones y retrasos están en milisegundos (GSAP usa segundos).

animate

animate('.square', {
  x: 320,                       // forma abreviada de translateX
  rotate: { from: -180 },
  opacity: [0, 1],              // [desde, hasta]
  duration: 1250,
  delay: stagger(65, { from: 'center' }),
  ease: 'inOutQuint',
  loop: true,
  alternate: true,
})

Objetivos: selector CSS, elemento(s) o un objeto plano (animate(obj, { value: 100, onUpdate: () => draw(obj.value) })).

Timeline

const tl = createTimeline({ defaults: { duration: 600, ease: 'outExpo' } })
tl.add('.title', { opacity: [0, 1], y: [40, 0] })
  .add('.sub',   { opacity: [0, 1] }, '-=300')       // 300 ms antes del final anterior
  .add('.dot',   { scale: [0, 1], delay: stagger(80) }, '<<') // con el inicio anterior

Posiciones: 100 ms absolutos · '+=100' / '-=100' relativo al final anterior · '<' final anterior · '<<' inicio anterior · '<<+=250' · 'Etiqueta' (definir con tl.label('Etiqueta')) · stagger(10).

SVG

animate(svg.createDrawable('.line'), { draw: ['0 0', '0 1'], duration: 2000 }) // dibujado de trazo, valores 0–1 "inicio fin"
animate('#shapeA', { d: svg.morphTo('#shapeB'), duration: 800 })                // transformar la ruta A en B
animate('.car', { ...svg.createMotionPath('#road'), duration: 4000 })            // seguir una ruta (x, y, rotate)

Reproducción / scrubbing

autoplay: false, luego .play(), .pause(), .restart(), .reverse(), .seek(ms), .complete(), .cancel(), .revert() (deshace todos los estilos en línea).

React

const root = useRef(null)
useEffect(() => {
  const scope = createScope({ root }).add(() => {
    animate('.box', { x: 200 })     // los selectores están limitados al root
  })
  return () => scope.revert()
}, [])

Para video

Anime.js funciona con su propio reloj. Dentro de Remotion, constrúyelo pausado y busca por fotograma — nunca permitas que se reproduzca automáticamente:

const frame = useCurrentFrame()
const { fps } = useVideoConfig()
const tl = useRef(null)
useLayoutEffect(() => {
  tl.current = createTimeline({ autoplay: false }).add('.title', { y: [40, 0], opacity: [0, 1] })
  return () => tl.current.revert()
}, [])
useLayoutEffect(() => { tl.current.seek((frame / fps) * 1000) }, [frame, fps])

Prefiere el propio interpolate / spring de Remotion para movimientos simples; recurre a Anime.js cuando sus ayudas SVG (draw, morph, motion path) o sus escalonados ahorren trabajo real.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills relacionados