
Rekapi 缓动函数完全指南20 缓动曲线让关键帧动画更自然的秘诀【免费下载链接】rekapiA keyframe animation library for JavaScript项目地址: https://gitcode.com/gh_mirrors/re/rekapi如果你正在用 JavaScript 制作网页动画一定会发现真正让动画活起来的往往不是关键帧本身而是关键帧之间的缓动函数Easing。Rekapi 是一款轻量级的 JavaScript 关键帧动画库它内置了 20 多种缓动曲线从线性匀速到弹性回弹一应俱全。本指南将带你彻底掌握 Rekapi 缓动函数它们分别适合什么场景、如何给单个属性单独指定缓动曲线以及怎样用贝塞尔曲线自定义专属缓动让你的动画告别僵硬、充满生命力。什么是缓动函数为什么它如此重要简单来说缓动函数决定了动画从 A 点到 B 点怎么走。没有缓动的动画linear 线性运动全程匀速看起来像机器人一样生硬而加上缓动后动画会模拟真实世界的物理规律——物体不会瞬间启动或骤停而是有一个加速、减速的过程。linear ▁▂▃▄▅▆▇█ 匀速机械感 easeOut ▅▃▁▁▃▅▇█ 快速启动优雅刹车 easeIn ▁▃▅▇▇▅▃▅ 慢启动冲刺结束 easeInOut ▁▃▅▇▅▃▁▃ 两头慢中间快在 Rekapi 中缓动函数是作用于关键帧之间的每一段补间tween的缓动曲线取自它到达的那个关键帧而不是起始帧。这一点在排列多个关键帧时尤其重要。Rekapi 内置的 20 缓动曲线速查表Rekapi 完整继承了 Shifty 的缓动函数库全部缓动名称都是字符串使用时直接作为keyframe()方法的第三个参数传入即可。它们按曲线形态分为四大类类别缓动函数名线性匀速linear缓入加速easeInQuad、easeInCubic、easeInQuart、easeInQuint、easeInSine、easeInExpo、easeInCirc缓出减速easeOutQuad、easeOutCubic、easeOutQuart、easeOutQuint、easeOutSine、easeOutExpo、easeOutCirc缓入缓出先加速后减速easeInOutQuad、easeInOutCubic、easeInOutQuart、easeInOutQuint、easeInOutSine、easeInOutExpo、easeInOutCirc后缀从Quad到Quint表示曲线阶数越来越高冲劲越来越强Expo是指数级缓动冲击力最强Circ则是圆形轨迹缓动。Rekapi 把这些贝塞尔曲线数值定义在 dom.js 的BEZIERS表中你也可以看到每个名字对应的具体控制点。最常用的几种缓动曲线及适用场景面对 20 多个名字新手最常问的就是该用哪个。这里给你一份实战选型清单UI 元素淡入淡出推荐easeOutSine或easeInOutSine柔和细腻不会抢内容的风头卡片滑入、弹窗出现easeOutCubic是最稳妥的选择快速到位又带一点自然的减速页面横幅、首屏大元素easeOutExpo先快后慢出场极具冲击力弹簧感、俏皮的交互反馈easeOutBack或easeInOutBack会越过终点再回弹趣味十足DOM 渲染器还支持elastic等扩展缓动倒计时、进度条填充easeInQuad逐渐加速让人产生越来越快的紧迫感。一个实用小技巧大多数 Web 场景选easeOut*类就对了。心理学研究表明人类对快速启动、缓慢结束的动画感知最舒适因为大脑需要时间来处理运动结束后的画面变化。一键应用给关键帧设置缓动曲线在 Rekapi 中为关键帧添加缓动只需在keyframe()方法中传入缓动名称字符串这是最常用的一键应用方式import { Rekapi, Actor } from rekapi; const rekapi new Rekapi(); const actor rekapi.addActor(); actor.keyframe(0, { x: 50, y: 50 }) .keyframe(1000, { x: 300, y: 100 }, easeOutExpo);这样从 0ms 到 1000ms 的这一段补间就会应用easeOutExpo曲线小球仿佛被弹射出去又稳稳停住。想要循环播放时别忘了用rekapi.play()启动动画。注意每个关键帧KeyframeProperty默认的缓动是linear这个默认值定义在 keyframe-property.js。也就是说不传缓动参数时动画是匀速的这也是很多人觉得动画生硬的常见原因。进阶技巧为不同属性指定不同缓动曲线一个关键帧往往包含多个属性比如x、y、opacity。如果希望它们各自拥有不同的运动节奏可以把第三个参数从字符串换成对象按属性名逐一指定actor.keyframe(1000, { x: 300, y: 100, opacity: 0 }, { x: easeOutExpo, // x 走强缓出 y: easeInSine, // y 走柔缓入 opacity: linear // 透明度匀速淡出 });这段逻辑在 actor.js 的keyframe()方法中实现当传入的是对象时Rekapi 会读取easing[name]为每个属性分配对应的缓动曲线未指定的属性则自动回退到linear。这个技巧非常适合做分层动画——比如元素平移时用强缓出、颜色变化时用柔缓入层次感立刻提升。自定义缓动用贝塞尔曲线创造独有节奏内置的 20 曲线还不够用Rekapi 允许你传入四元数组[x1, y1, x2, y2]直接定义一个三次贝塞尔曲线cubic-bezier作为缓动函数// 一个先轻微回退、再强力冲出的自定义曲线 actor.keyframe(1000, { x: 300 }, [0.68, -0.55, 0.27, 1.55]);数组中的四个数字分别对应贝塞尔曲线的两个控制点你可以借助常见的 cubic-bezier 可视化工具先调好手感再填进代码里。这种写法同样支持上面提到的按属性分配——数组与字符串在 Rekapi 的easingOption类型中是等价的参见 main.js 的类型定义。常见问题与避坑指南为什么我的动画看起来是匀速的请检查是否给目标关键帧动画到达的那一帧传了缓动参数——缓动取自目标关键帧而非起始帧缓动不生效确认缓动名称拼写是否正确Rekapi 对缓动名区分大小写如easeOutExpo而非easeoutexpo多个属性一起动很乱优先使用按属性指定缓动的对象写法让位移、缩放、透明度各司其职想实现弹性、反弹效果DOM 渲染器内置了elastic、back等扩展缓动见 dom.js 的文档示例可以直接拿来用。总结让动画自然的三个核心秘诀告别默认 linear90% 的动画都值得配一个缓动函数哪怕是最简单的easeOutQuad按场景选曲线柔和用Sine、稳重用Cubic、冲击用Expo先跑通再微调善用分层缓动用对象语法为每个属性分配独立缓动动画质感立刻上一个台阶。Rekapi 把这 20 缓动曲线打包成一行字符串就能调用的简单 API配合关键的贝塞尔自定义能力你完全可以在不写一行补间逻辑的情况下做出媲美专业动效库的 JavaScript 动画。现在挑一条曲线让你的关键帧动画动起来吧【免费下载链接】rekapiA keyframe animation library for JavaScript项目地址: https://gitcode.com/gh_mirrors/re/rekapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考