前端 JS 经典:数字变化动画

1. 需求

给你一个数字,当这个数字变化时,有一个动画的过渡效果。

2. 思路

首先我们要知道两个数字变化需要多少秒,然后变化的范围,算出变化的速度。记住开始变化的时间,然后通过 requestAnimationFrame函数,确定事件下一帧执行。

3. 效果

4. 代码实现

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta
      name="viewport"
      content="initial-scale=1.0, user-scalable=no, width=device-width"
    />
    <title>document</title>
    <style></style>
  </head>
  <body>
    <button class="btn">打折</button>
    <label>价格:4599.00</label>
    <script>
      const label = document.querySelector("label");
      const btn = document.querySelector(".btn");

      function animation(duration, from, to, callback) {
        let value = from;
        const speed = (to - from) / duration;
        const start = Date.now();
        function _run() {
          const t = Date.now() - start;
          if (t >= duration) {
            value = to;
            callback(value);
            return;
          }
          value = from + t * speed;
          callback(value);
          requestAnimationFrame(_run);
        }
        _run();
      }

      btn.onclick = function () {
        animation(2000, 4599, 30, (value) => {
          label.textContent = `价格:${value.toFixed(2)}`;
        });
      };
    </script>
  </body>
</html>
相关推荐
涛涛ing3 分钟前
2026年9月,前端圈同时发生了四件事,指向同一个方向
前端
艾伦野鸽ggg16 分钟前
Vue2 模板语法与样式绑定
前端
Amos_Web17 分钟前
Rspack 源码解析(十一):资产 Hook 与增量构建
前端·rust·源码阅读
PC2005_cloud17 分钟前
Windows 数据使用量页面卡死:1097 个热点档案和 161 MB 的 SRUM 库
前端·后端
烈风逍遥19 分钟前
AI大模型中fetch 和 ReadableStream为啥一起出现
前端·人工智能
haluhalu.21 分钟前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
PC2005_cloud28 分钟前
Nginx 防盗链配置实战:用 referer 模块保护网站静态资源
前端·后端
福兮说29 分钟前
Canvas 文字排版:measureText 量出来的宽度为什么总是不对
前端·javascript
孙启超33 分钟前
【AI开发之Rust】第 12 课:并发模型与同步原语
开发语言·后端·rust
夏幻灵35 分钟前
从零理解 Redux:从 state、action、reducer 到 Redux Toolkit 与异步请求
前端