React数值滚动效果,支持数值变化变化

news/2025/1/8 16:32:17/文章来源:https://www.cnblogs.com/zion0707/p/18657527

效果:

组件:(NumberScroller.jsx)

/*** 数字滚动效果*/
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';const NumberScroller = ({ targetValue = 0, decimalPlaces = 0, duration = 2000 }) => {const [value, setValue] = useState(0);useEffect(() => {const start = performance.now();const interval = setInterval(() => {const elapsed = performance.now() - start;const progress = elapsed / duration;const newValue = value + (targetValue - value) * progress;setValue(newValue);if (progress >= 1) {clearInterval(interval);setValue(targetValue);}}, 10);return () => clearInterval(interval);}, [targetValue, duration]);return <div style={{ fontSize: 80 }}>{value.toFixed(decimalPlaces)}</div>;
};NumberScroller.propTypes = {// 目标值targetValue: PropTypes.number,// 保留多少位小数decimalPlaces: PropTypes.number,// 滚动速率(数字越大,滚动越慢)duration: PropTypes.number,
};export default NumberScroller;

测试:

import { useEffect, useState } from 'react';import NumberScroller from './NumberScroller';const Page = () => {const [targetValue, setTargetValue] = useState(Math.random() * 2000);useEffect(() => {}, []);return (<div className="test" style={{ padding: 20 }}><NumberScroller targetValue={targetValue} /><buttononClick={() => {setTargetValue(Math.random() * 2000);}}>更改</button></div>);
};export default Page;

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#笔记(1、钉钉机器人推送帆软报表图片)

C#笔记——钉钉机器人推送帆软报表图片(一)1、前言 ​ 2024年最后一个月,家里多了个小公主,在家休息了一段时间。2025年,休完假上班第一天,领导就说:哎,我看总部那边做了个每日产出的报表推送到钉钉群,来看计划达成率。我们基地这边能不能做啊。我心里默默一想,然后大…

Javascript实现asp.net mvc的checkbox基本功能

Html的checkbox使用很广的,它的状态,勾选与非选。初始状态,默认为非选。你可以设置它是勾选, 直在checkbox 标签中,添加checked属性。另外,在javascript可以这样,getById(Checkbox_IsPublished).checked = true; 或者,getById(Checkbox_IsPublished).setAttribute(che…

“非旺玖原装的PL2303,请联系您的供应商”232串口转换器解决办法

偶尔会用到PL2303这种十几年前的旧芯片做的232串口转换器,如果手头没有别的工具必须使用的话,需要配置一下才能使用。该串口调试器在不同的USB口插入可能出现COM口无效或者端口号变动(COM 4/7/8等),需要通过设备管理器进行修改 当提示题目上的错误时,需要重装旧版本驱动1…

记录一个Github推送的问题(ssh推送出现:Connection closed by 198.18.0.9 port 22)

一、前言: 在公司需要将一个文档推送到GitHub仓库,由于Github对Https的推送已经移除了对密码认证的支持(2021.8.13),所以想要进行身份验证就只能使用两种方式:使用Persional Access Token(PAT) 使用SSH认证 PAT认证太麻烦了,每次都要输入,这里就主要介绍使用SSH认证的方…

安川机器人的独特优势

安川机器人,这一源自日本安川电机(Yaskawa Electric Corporation)的杰出产物,是工业自动化领域中的佼佼者,其核心价值在于生产线上那精准无误的自动化作业能力。这款机器人集成了电机、减速器、传感器、控制器等一系列精密部件,如同一套高效协同的作战系统,为企业带来了生…

2020-2024 IDEA安装+激活

一、下载 1. IDEA各版本官方下载入口 IDEA官网下载地址 2. 选择左边,然后点击【20xx.x.x-Windows(exe)】 PS: 如需下载特定版本,可以往下拉,都是选择【202x.x-Windows(exe)】下载二、安装 1. 点击运行 ps: 安全警告是部分电脑有,没有跳过就可以了~2. 点击下一步3. 选择安…

CDS标准视图:维护包描述 I_MaintPackageTextData

视图名称:维护包描述 I_MaintPackageTextData 视图类型:基础 视图代码:点击查看代码 @EndUserText.label: Maintenance Package - Text @ObjectModel.dataCategory: #TEXT @VDM.viewType: #COMPOSITE @AbapCatalog.sqlViewName: IMNTPCKGTXTDATA @AbapCatalog.compiler.comp…

CDS标准视图:维护包数据 I_MaintenancePackageData

视图名称:维护包数据 I_MaintenancePackageData 视图类型:基础 视图代码:点击查看代码 @AbapCatalog.sqlViewName: IMAINTPCKGDATA @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #PRIVILEGED_ONLY @EndUserText.label: Maintenance Packa…

让跨 project 联查更轻松,SLS StoreView 查询和分析实践

在业务场景中,日志数据可能存储在日志服务 Project 的不同 Logstore/MetricStore 中或不同地域的 Project 中。日志服务的数据集(StoreView)功能支持跨地域、跨 Store 联合查询和分析,让用户基于数据集就能高效便捷地查询分析全地域的数据,真正做到数据分析不受地域边界的…

流程配置中心同步后流程版本ID不一致

不同的账套进行流程发布时会产生不同的版本ID , BOS同步后的流程设计的ID是相同的.

大语言模型提示技巧(六)-文本转换

大语言模型是基于自然语言的人工智能,所以它在语言上的表现相当出色,使用大语言模型进行可以进行诸如翻译、语气转换、润色、语言评价、扩写、润色等语言处理,对于日常文字工作,它是一名合格甚至优秀的私人秘书。 (一)翻译 在不同语言之间进行翻译是众多大语言模型都支持…

Unreal Engine 5 课程记录 蓝图部分(非教程)

学习课程:Unreal Engine 5 – Full Course for Beginners 非教程,仅学习记录及碎碎念,学完感觉UE就非常的像预制菜,简简单单就能有非常好的效果(非常に新鲜で、非常に美味しい!),但装料太足了要想拆分明白用料和流程又会比较复杂!Creating Levels 创建基本关卡,几个组…