前端 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>
相关推荐
2601_9628857234 分钟前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel1 小时前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓1 小时前
调用openrouter的免费API模型
java·前端·javascript
赛博守夜人1 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every1 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c2 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌2 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
networknomad2 小时前
OpenReplay:自己搭的会话回放工具,给前端排错用的
前端·其他
缓慢更新3 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
超级架构师3 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core