CULTIVA IA — Cheatsheet Web

gsap.utils
Referencia Visual

Todas las funciones utilitarias de GSAP con ejemplos prácticos para animaciones web avanzadas.

14 utilidades documentadas
gsap@3.x compatible
intermedio nivel
Cultiva Digital cliente
Clamping & Rangos
clamp()
Rango

Restringe un valor entre min y max. Omitir value devuelve una función reutilizable.

clamp(min: number, max: number, [value]?) → number | fn
gsap.utils.clamp(0, 100, 150); // → 100 gsap.utils.clamp(0, 100, -10); // → 0 let clamp = gsap.utils.clamp(0, 100); clamp(150); // → 100 clamp(42); // → 42
Visualización
clamp(0,100, -10)0
clamp(0,100, 42)42
clamp(0,100, 150)100
0
100
mapRange()
Rango

Mapea un valor de un rango a otro. Perfecto para scroll → posición, progreso → grados.

mapRange(inMin, inMax, outMin, outMax, [value]?)
gsap.utils.mapRange(0, 100, 0, 500, 50); // → 250 // scroll → rotación let scrollToRot = gsap.utils.mapRange(0, 1, 0, 360); scrollToRot(0.5); // → 180°
Input [0–100] → Output [0–500]
mapRange(…, 0)0
mapRange(…, 25)125
mapRange(…, 50)250
mapRange(…, 75)375
mapRange(…, 100)500
normalize()
Rango

Normaliza un valor a 0–1 dentro de un rango. Inverso de mapRange cuando el destino es 0–1.

normalize(min, max, [value]?) → 0–1
gsap.utils.normalize(0, 100, 50); // → 0.5 gsap.utils.normalize(100, 300, 200); // → 0.5 let norm = gsap.utils.normalize(0, 100); norm(25); // → 0.25 norm(75); // → 0.75
normalize(0, 100, x)
0
25
50
75
100
0.25 0.50 0.75
interpolate()
Rango

Interpola entre dos valores al progreso dado (0–1). Soporta números, colores y objetos.

interpolate(start, end, [progress]?)
gsap.utils.interpolate(0, 100, 0.5); // → 50 // Colores gsap.utils.interpolate("#7c3aed", "#06b6d4", 0.5); // Objetos gsap.utils.interpolate( { x: 0, y: 0 }, { x: 100, y: 50 }, 0.5 ); // → { x: 50, y: 25 }
Interpolación de Color: #7c3aed → #06b6d4
0%
25%
50%
75%
100%
Random & Snap
random()
Aleatorio

Valor aleatorio en rango o elemento de array. Pasar true como último arg devuelve función reutilizable.

gsap.utils.random(-100, 100); // e.g. → 42.7 // snapping a múltiplos de 5 gsap.utils.random(0, 500, 5); // función reutilizable let rnd = gsap.utils.random(-200, 200, 10, true); rnd(); // -60 rnd(); // 130 // string form en tween gsap.to(".box", { x: "random(-100,100,5)" });
random(0, 100, 10) — 8 muestras
70
30
90
50
20
80
40
60
snap()
Snap

Ajusta un valor al múltiplo más cercano o al valor más próximo en un array.

gsap.utils.snap(10, 23); // → 20 gsap.utils.snap(0.25, 0.7); // → 0.75 // snap a array gsap.utils.snap([0,100,200], 130); // → 100 // función reutilizable let snapFn = gsap.utils.snap(25); snapFn(38); // → 25 snapFn(63); // → 75
snap(25) — grid 0→100
0
10
18
25
38
50
63
75
88
100
Celdas resaltadas = valores snap válidos
shuffle()
Array

Devuelve un array con los mismos elementos en orden aleatorio. Útil para staggers aleatorios.

gsap.utils.shuffle([1, 2, 3, 4]); // → [3, 1, 4, 2] // stagger aleatorio const items = gsap.utils.toArray(".item"); const shuffled = gsap.utils.shuffle([...items]); gsap.to(shuffled, { opacity: 1, stagger: 0.1 });
Antes → Después del shuffle
A
B
C
D
↓ shuffle()
C
A
D
B
Wrap & Ciclos
wrap()
Ciclo

Envuelve un valor en el rango min–max (min inclusivo, max exclusivo). Para scroll infinito o valores cíclicos.

gsap.utils.wrap(0, 360, 370); // → 10 gsap.utils.wrap(0, 360, -10); // → 350 gsap.utils.wrap(0, 360, 720); // → 0 let wrap = gsap.utils.wrap(0, 360); wrap(400); // → 40 wrap(-90); // → 270
wrap(0, 360) — ciclo continuo
input: -10
→ 350°
input: 180
→ 180°
input: 370
→ 10°
input: 720
→ 0°
wrapYoyo()
Ciclo

Envuelve con efecto yoyo (rebota en los extremos). Para animaciones de ida y vuelta dentro de un rango.

gsap.utils.wrapYoyo(0, 100, 150); // → 50 gsap.utils.wrapYoyo(0, 100, 250); // → 50 let yoyo = gsap.utils.wrapYoyo(0, 100); yoyo(0); // → 0 yoyo(80); // → 80 yoyo(120); // → 80 yoyo(200); // → 0
wrapYoyo(0,100) — movimiento péndulo
min:0bouncemax:100bouncemin:0
Composición & Distribución
pipe()
Compose

Compone funciones: pipe(f1, f2, f3)(value) aplica f1→f2→f3 en cadena. Perfecto para transformaciones encadenadas.

const transform = gsap.utils.pipe( v => gsap.utils.normalize(0, 100, v), v => gsap.utils.mapRange(0, 1, 0, 360, v), v => gsap.utils.snap(45, v) ); transform(55); // 55 → 0.55 → 198° → 180°
transform(55) — cadena de transformación
input: 55
normalize(0,100)
0.55
mapRange(0,1,0,360)
198°
snap(45)
180°
distribute()
Stagger

Distribuye valores entre múltiples targets. Útil para staggers avanzados, escala desde el centro, etc.

gsap.to(".card", { scale: gsap.utils.distribute({ base: 0.3, amount: 1.7, from: "center", ease: "power1.inOut" }) }); // bordes → scale 0.3, centro → scale 2.0
distribute — escala desde el centro
from: "center" — mayor escala en el centro
Arrays, Selector & Unidades
toArray()
Array

Convierte cualquier tipo (selector, NodeList, elemento) a un Array real.

gsap.utils.toArray(".item"); // HTMLElement[] gsap.utils.toArray(nodeList); // Array real (no NodeList) gsap.utils.toArray(".card", wrapper); // scoped al wrapper
Conversiones soportadas
".selector"Element[]
NodeListArray
HTMLElement[Element]
ArrayArray
selector()
Scope

Devuelve una función selectora con scope a un contenedor. Ideal para componentes React/Vue.

// En React const ref = useRef(); const q = gsap.utils.selector(ref); useEffect(() => { gsap.to(q(".box"), { x: 100 }); // solo afecta .box dentro del ref }, []);
Scope isolation
Container ref
.box
.box
Otro container
.box (ignorado)
getUnit() unitize()
Unidades

Extrae o añade unidades a valores. Útil al construir valores CSS dinámicos.

gsap.utils.getUnit("100px"); // "px" gsap.utils.getUnit("50%"); // "%" gsap.utils.getUnit(42); // "" gsap.utils.unitize(100, "px"); // "100px" gsap.utils.unitize("2rem", "px"); // "2rem" // splitColor gsap.utils.splitColor("#7c3aed"); // → [124, 58, 237] gsap.utils.splitColor("#7c3aed", true); // → [262, 83, 58] HSL
splitColor("#7c3aed")
R:124
G:58
B:237
Full
Tabla de Referencia Rápida
Función Devuelve función si omites value Caso de uso principal Ejemplo
clamp(min,max)Evitar overflow de valoresclamp(0,1, 1.5) → 1
mapRange(…)Scroll pos → propiedad CSSmapRange(0,1,0,360, 0.5) → 180
normalize(min,max)Obtener progreso 0–1normalize(0,100, 75) → 0.75
interpolate(a,b)Lerp números, colores, objetosinterpolate(0,100, 0.5) → 50
random(min,max)Pasar true al finalValores aleatorios por elementorandom(-100,100,5,true)()
snap(to)Grid / paso fijosnap(25, 38) → 25
shuffle(arr)No (devuelve array)Orden aleatorio de targetsshuffle([a,b,c]) → [c,a,b]
wrap(min,max)Scroll infinito, cicloswrap(0,360, 400) → 40
wrapYoyo(min,max)Péndulo, rebotewrapYoyo(0,100, 150) → 50
pipe(...fns)Siempre funciónComponer transformacionespipe(norm, map, snap)(55)
distribute(config)Siempre funciónStaggers avanzados{base,amount,from:"center"}
toArray(sel)NoNodeList → Array realtoArray(".item") → []
selector(scope)No (devuelve fn)Selects scoped (React/Vue)q(".box") dentro de ref
getUnit(val)NoDetectar unidad CSSgetUnit("2rem") → "rem"
unitize(num,unit)NoAñadir unidad si faltaunitize(100,"px") → "100px"
splitColor(color)NoAcceder a canales RGB/HSLsplitColor("#fff") → [255,255,255]
Buenas Prácticas
Sí hacer
✓ DO
  • Omitir value para obtener función reutilizable cuando el mismo rango se usa muchas veces (handler de scroll, callback de tween).
  • Usar snap() para valores alineados a grid o pasos fijos.
  • Usar selector(scope) en componentes para evitar seleccionar elementos de otros componentes.
  • Usar pipe() para encadenar normalize → mapRange → snap en una sola función limpia.
  • Usar toArray() siempre que GSAP o tu código necesite un Array real (no NodeList).
No hacer
✗ DON'T
  • Asumir que mapRange o normalize manejan unidades CSS — solo trabajan con números. Usar getUnit / unitize cuando importen las unidades.
  • Usar random() con función reutilizable omitiendo el valor — a diferencia de otras utils, debes pasar true como último argumento.
  • Depender de comportamiento no documentado o de versiones futuras de la API.
  • Crear tus propias funciones de clamp/lerp/wrap cuando GSAP ya las ofrece optimizadas.