前端 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>
相关推荐
溪语流沙11 分钟前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
学逆向的12 分钟前
win32注入代码
开发语言·网络安全·api·win32
逐光者93318 分钟前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC26 分钟前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
Sarvartha38 分钟前
内部类知识
java·开发语言
CDwenhuohuo39 分钟前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师41 分钟前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01231 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化
FPGA小徐1 小时前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#
北京盛世宏博1 小时前
工业环境监测选型:Modbus TCP以太网温湿度传感器部署、调试、避坑全指南
开发语言·网络·php