使用JavaScript和贝塞尔曲线实现数字动态增长的分段展示效果
本文演示如何利用JavaScript中的贝塞尔曲线函数,精确控制数字的动态增长速度,并实现数字分段显示的效果。目标是将数字从0增长到1000,增长速度由贝塞尔曲线控制,并分段显示数字。
核心思路是:利用贝塞尔曲线计算不同时间点的增长比例,并将此比例应用于目标数字的增长。通过调整贝塞尔曲线的控制点,可以改变增长速度的曲线形状。
以下代码片段展示了实现方法:
// 贝塞尔曲线控制点 const startX = 0; const startY = 0; const cp1X = 0.1; const cp1Y = 0.4; const cp2X = 0.1; const cp2Y = 1; const endX = 1; const endY = 1; // 贝塞尔曲线函数 function bezier(t) { const cx = 3 * (cp1X - startX); const cy = 3 * (cp1Y - startY); const bx = 3 * (cp2X - cp1X) - cx; const by = 3 * (cp2Y - cp1Y) - cy; const ax = endX - startX - cx - bx; const ay = endY - startY - cy - by; const x = ax * t * t * t + bx * t * t + cx * t + startX; const y = ay * t * t * t + by * t * t + cy * t + startY; return y; } // 数字增长动画 let count = 0; const target = 1000; const duration = 3000; // 动画持续时间 (毫秒) const startTime = Date.now(); function update() { const elapsed = Date.now() - startTime; const t = Math.min(1, elapsed / duration); count = Math.round(bezier(t) * target); // 分段显示数字 (示例:每100递增显示一次) const displayCount = Math.floor(count / 100) * 100; document.getElementById('count').textContent = displayCount; if (elapsed < duration) { requestAnimationFrame(update); } } update();
这段代码定义了贝塞尔曲线的控制点,bezier 函数计算给定时间 t 对应的 y 坐标(即增长比例)。update 函数根据时间推移计算当前增长比例,并更新 count 值。 为了实现分段显示,代码中增加了 displayCount 变量,只显示100的倍数。 最后,requestAnimationFrame 保证动画流畅。 需要在html中添加一个 id=”count” 的元素来显示数字。
通过调整 cp1X, cp1Y, cp2X, cp2Y 这四个控制点的值,可以改变贝塞尔曲线的形状,从而控制数字增长的速度和加速度。 分段显示数字的逻辑可以根据实际ui需求进行修改,例如可以根据不同的阈值进行分段,或者在不同的位置显示数字片段。
记住在你的HTML文件中包含一个id为”count”的元素: 0
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END