gsap.utils 工具函数

动画经常要把「鼠标 X、滚动进度、0~1」映射成位移或颜色。 这些函数不创建 tween,只做数值处理。

函数作用例子
mapRange(inMin, inMax, outMin, outMax, value) 线性映射 进度 0~1 → x 0~400
clamp(min, max, value) 限制范围 倾斜角不超过 ±12°
interpolate(a, b, progress) 插值;a/b 可以是颜色字符串 interpolate("#fff", "#000", 0.5)
wrap(min, max, value) 越界回绕 无限轮播下标
snap(increment | array, value) 吸附 计数器取整 snap: 1
random(min, max) / random(arr) 随机 粒子初速度
unitize(fn, unit) 给数字结果加单位 配合 mapRange 输出 "12px"
toArray(selector) 统一成数组 NodeList → Array
pipe(fn1, fn2, ...) 函数组合 mapRange 后再 clamp
normalize(min, max, value) 压到 0~1 mapRange 的特例
即时计算
mapRange(0, 100, 0, 500, 50) =
clamp(0, 10, 15) =
interpolate("#3b82f6", "#ef4444", 0.5) =
wrap(0, 5, 7) =
random(1, 100) =
gsap.utils.mapRange(0, 100, 0, 500, 50); // 250
gsap.utils.clamp(0, 10, 15);             // 10
gsap.utils.wrap(0, 5, 7);                // 2  (区间 [0,5) 回绕)
拖滑条:把 0~100 映射成盒子 x
MAP
const mapX = gsap.utils.mapRange(0, 100, 0, 480);
range.oninput = () => gsap.set("#mapBox", { x: mapX(range.value) });