前端开发攻略---用JavaScript打造炫酷数字变化动画效果:手写实现你的自定义动画函数!支持更改任意数字、动画速度

news2024/11/24 13:31:22

1、演示

2、介绍

这篇文章将向您展示如何使用JavaScript来创建一个自定义的动画函数,以实现数字变化效果。我们将深入了解前端动画的本质,并通过手写代码来实现这个炫酷的数字变化动画效果。您将学到如何利用JavaScript来操作DOM元素,控制动画的过程和效果,以及如何提升用户体验和网页交互性。无论您是初学者还是有经验的开发者,本文都将为您提供有益的知识和实用的技巧,让您能够轻松创建令人惊艳的前端动画效果。 

3、动画的本质

前端动画的本质在于通过在网页上操作元素的样式和属性,以创建视觉上的变化和动态效果。这些效果可以吸引用户的注意力,提升用户体验,以及增强网页的交互性。实现前端动画的方法通常包括使用CSS动画、JavaScript动画或者结合两者。CSS动画适用于简单的动画效果,而JavaScript动画则更加灵活,可以实现更复杂的动态效果,同时也能够通过手动控制动画的时间、速度和过渡效果来实现更精细的控制。无论是哪种方法,前端动画的本质都是通过在网页上操作元素的样式和属性,以创造出令人愉悦和吸引人的视觉效果。

说白了就是在一段时间里面,一个数字变换到另一个数字,本质就是数字的变化

4、requestAnimationFrame

当涉及到前端动画时,requestAnimationFrame 是一个非常重要的工具。它是一个专门为动画设计的 JavaScript 方法,能够在浏览器下一次重绘之前执行指定的函数,从而创建平滑流畅的动画效果。

使用 requestAnimationFrame 的基本用法是在动画循环中调用它。通常,您会在动画函数中递归调用 requestAnimationFrame,以便在每一帧都更新动画状态并进行下一次重绘。这样可以确保动画在浏览器的渲染间隙中进行,避免了因为在间隙内的不必要渲染而引起的性能问题。

下面是 requestAnimationFrame 的基本用法示例:

function animate() {
  // 更新动画状态

  // 绘制动画

  // 递归调用 requestAnimationFrame
  requestAnimationFrame(animate);
}

// 启动动画
animate();

通过结合 requestAnimationFrame 和其他 JavaScript 技术,您可以创建出令人印象深刻的交互式和动态的前端效果。

5、源码及注释(您只需要copy然后改成你想要的样子就行了)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      button {
        padding: 5px 10px;
      }
    </style>
  </head>
  <body>
    <button>打折</button>
    <span>价格:</span>
    <span class="price">40000</span>
  </body>
  <script>
    const btn = document.querySelector('button')
    const label = document.querySelector('.price')

    // 1、点击按钮的时候将一个数字变换为另一个数字
    btn.addEventListener('click', function () {
      // 封装一个 animation函数
      // 参数表示的意思:动画的时间 起始数字 结束数字 回调函数
      animation(5000, 40000, 40, val => {
        console.log(val)
        label.textContent = val.toFixed(2)
      })
    })

    function animation(duration, from, to, onProgress) {
      let value = from
      const start = Date.now()
      // 变化速度
      const speed = (to - from) / duration
      // _run函数:让value一点一点变化
      function _run() {
        // 1、改变value的值
        const t = Date.now() - start
        if (t >= duration) {
          value = to
          onProgress(value)
          return
        }
        // 总值 = 起点值 + 变化时间 * 变化速度
        value = from + t * speed
        onProgress(value)
        // 2、注册下一次的变化
        requestAnimationFrame(_run)
      }

      // 一开始执行
      _run()
    }
  </script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA基于VCU的H265视频解压缩,解码后HDMI2.0输出,支持4K60帧,提供工程源码+开发板+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的视频图像编解码方案4K60帧HDMI2.0输入&#xff0c;H265视频压缩方案 3、详细设计方案设计框图FPGA开发板解压视频源Zynq UltraScale VCUVideo Frame Buffer ReadVideo MixerHDMI 1.4/2.0 Transmitter SubsystemVideo PHY Cont…

ARM内核、内核寄存器及作用、ARM最小系统、半导体器件、存储器、ARM工作方式、ARM寄存器个数、立即数、汇编指令的s/c后缀

我要成为嵌入式高手之4月10日51单片机第五天&#xff01;&#xff01; ———————————————————————————— 单片机最小系统板&#xff1a; 单片机内部的CPU&#xff1a; CPU定义的变量都在ram中、编写的程序代码都在rom中 CPU在次细化&#xff1a;ker…

计算机导论——C语言001

前言 学习一门语言不是要记住所有这些函数&#xff0c;而是要懂得在哪里找到解决问题的答案 学习英语不是要记住所有单词&#xff0c;而是要懂得查字典&#xff08;因为这样就可以理解单词&#xff0c;并会用单词造句子了&#xff09; 以下侧重于了解输出&#xff08;side eff…

new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数,用于创建软体物体的辅助对象,提供了一些方法来创建软体物体

demo案例 new Ammo.btSoftBodyHelpers() 是 Ammo.js 中的一个构造函数&#xff0c;用于创建软体物体的辅助对象&#xff0c;提供了一些方法来创建软体物体。以下是它的一些重要信息&#xff1a; 入参&#xff1a;通常不需要传入参数。 出参&#xff1a;创建的新的软体辅助对…

软件设计师-基础知识科目-面向对象技术知识7

七、面向对象技术知识&#xff1a; 面向对象基础知识&#xff1a; 对象&#xff1a; 对象的组成部分包括&#xff1a;对象名&#xff0c;状态(属性)&#xff0c;行为(操作)。 类&#xff1a; 类的分类&#xff1a;实体类、接口类(边界类)和控制类。 实体类的对象&#xff…

CentOS7 boa服务器的搭建和配置

环境是CentOS7&#xff0c;但方法不局限于此版系统&#xff0c;应该是通用的。 具体步骤如下&#xff1a; 1. 下载boa源码 下载地址: Boa Webserver 下载后&#xff0c;进入压缩包所在目录&#xff0c;进行解压&#xff1a; tar xzf boa-0.94.13.tar.gz 2. 安装需要的工具b…

信息系统项目管理师——第23章组织通用管理

本章在第三版流程和知识管理的基础上新增了2节内容&#xff0c;从2023年上半年的考情来看来 选择题&#xff0c;考1分左右&#xff0c;知识点比较分散&#xff0c;刷下题&#xff0c;考前突击下即可。 案例题&#xff0c;不考。 论文题&#xff0c;不考。 1人力资源管理 1.人…

微服务学习(黑马)

学习黑马的微服务课程的笔记 导学 微服务架构 认识微服务 SpringCloud spring.io/projects/spring-cloud/ 服务拆分和远程调用 根据订单id查询订单功能 存在的问题 硬编码 eureka注册中心 搭建eureka 服务注册 在order-service中完成服务拉取 Ribbon负载均衡 Nacos注册中心…

结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟

原文链接&#xff1a;结合ArcGISSWAT模型Century模型&#xff1a;流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2NV9sMGRZNUJoVkNVc1ZzSzRuMl9XXzhqX0R3cXpESWFwM1E4cFY4ejNqWFh3VUl0dlZkNWk4b20ydFdFTy1xS2ZObGN0Z0ZXSjly…

交流电源的频率如何测试

交流电源的频率是指每秒钟交流电源周期的数量&#xff0c;通常是50Hz和60Hz。但是在实际使用中会有一定的波动&#xff0c;一般交流电源频率的波动范围是10%。 交流电源频率的高低对电路有很大的影响&#xff0c;直接影响着电能质量和电路的稳定性。此外&#xff0c;交流电源的…

Docker核心特征

Docker的基本概念 Dockerfile&#xff1a;制作进行的文件&#xff0c;可以理解为制作镜像的一个清单。 镜像&#xff1a;用来创建容器的安装包&#xff0c;可以理解为给电脑安装操作系统的系统镜像。 容器&#xff1a;通过镜像来创建的一套运行环境&#xff0c;一个容器里可…

eBPF 主题分享:Kindling-OriginX 解密如何揭开可观测性盲区实现根因推导

“第二届eBPF开发者大会”将于2024年4月13日在陕西省西安市线下召开,由西安邮电大学主办。本次大会以“发挥eBPF技术力量&#xff0c;提升计算机系统可观测性和性能”为主题&#xff0c;涵盖了eBPF技术及发展、eBPF网络安全应用、eBPF可观测性及应用、软件性能工程等方面&#…

代理模式:控制对象访问的智能方式

在面向对象的软件开发中&#xff0c;代理模式是一种结构型设计模式&#xff0c;它为其他对象提供一个代理或占位符以控制对这个对象的访问。代理模式在实现权限控制、延迟初始化和远程对象访问等方面非常有用。本文将详细介绍代理模式的定义、实现、应用场景以及优缺点&#xf…

Tomcat以服务方式启动,无法访问网络共享目录问题

关于“Tomcat以服务方式启动&#xff0c;无法访问网络共享目录问题”解决方式如下&#xff1a; 1、通过doc命令【services.msc】打开本地服务找到&#xff0c;找到tomcat服务所在位置 2、右键打开Tomcat服务的属性 3、选择 登陆选项卡 4、选择“此账户”选项&#xff0c;并…

预告:(阶乘)+统计读取的单个字符+把我电脑给干关机了的题,还好在tmp里面找到(穷举法编程)+(双循环算法)+(最大公约数,最小公倍数)

在赶一篇作业出来 第一个&#xff1a; 题目&#xff1a;编程实现&#xff0c;求saaaaaaaa⋯an个a的值&#xff0c;其中a是一个数字。例如当a为2&#xff0c;n为5时&#xff0c;计算&#xff0c;2&#xff0b;22&#xff0b;222&#xff0b;2222&#xff0b;22222的值。 #inc…

elementUI 下拉框加提示文案

效果如下&#xff1a; 展示文案在最下面&#xff0c;跟选项有个分割线 <el-select v-model"value" placeholder"请选择" clearable popper-class"addNotice" class"addNoticeS" visible-change"(v) >selectNotice(v,展示…

物联网SaaS平台

在信息化、智能化浪潮席卷全球的今天&#xff0c;物联网SaaS平台作为推动工业数字化转型的重要工具&#xff0c;正日益受到广泛关注。那么&#xff0c;物联网SaaS平台究竟是什么&#xff1f;HiWoo Cloud作为物联网SaaS平台又有哪些独特优势&#xff1f;更重要的是&#xff0c;它…

Docker 学习笔记(三):Centos7 中 Docker 使用,镜像、容器,以及操作等常用命令小结

一、前言 记录时间 [2024-4-7] 前置文章&#xff1a; Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#…

IDEA2023连接服务器docker并部署ruoyi-cloud-plus项目

文章目录 TCP 方式连接docker1. 服务器docker配置修改查看虚拟机中Docker配置文件位置修改配置文件重启docker服务关闭防火墙 2. idea安装docker插件3. idea连接docker服务 部署ruoyi-cloud-plus项目1. 项目环境说明2. 安装Centos73. 安装docker4. idea配置服务器SSH连接5. ide…

SHAP安装问题

一、安装 pip install shap -i https://pypi.tuna.tsinghua.edu.cn/simple 二、遇到问题 1、提示报错如下&#xff1a; ModuleNotFoundError: No module named numba.core 安装numba&#xff1a; pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple 提示已经…