前端 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>
相关推荐
喵了meme1 小时前
C语言实战4
c语言·开发语言
码界奇点1 小时前
Python从0到100一站式学习路线图与实战指南
开发语言·python·学习·青少年编程·贴图
9ilk1 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
sali-tec2 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
老前端的功夫2 小时前
Vue 3 性能深度解析:从架构革新到运行时的全面优化
javascript·vue.js·架构
天天扭码2 小时前
如何实现流式输出?一篇文章手把手教你!
前端·aigc·ai编程
前端 贾公子3 小时前
vue移动端适配方案 === postcss-px-to-viewport
前端·javascript·html
生骨大头菜3 小时前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我3 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
GISer_Jing4 小时前
AI营销增长:4大核心能力+前端落地指南
前端·javascript·人工智能