如何用贝塞尔曲线实现数字动态增长的分段展示效果?

如何用贝塞尔曲线实现数字动态增长的分段展示效果?

使用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
喜欢就支持一下吧
点赞14 分享