• react实现动态递增展示数字特效


    可视化展示界面时有一种场景,就是页面在初始化的时候,有些数字展示想要从某个值开始动态递增到实际值,形成一种动画效果。例如:

    写一个数字递增的组件,有两种方式:1.固定步长,代码如下:

    1. import {useEffect, useRef, useState} from 'react';
    2. const Counter = ({counts, time = 500}) => { //counts:传入的数字,time: 默认500毫秒之内整个动画完成
    3. const [count, setCount] = useState(0);
    4. useEffect(() => {
    5. const step = counts <= time ? 1 : Math.ceil(counts / time); // 两种情况:1.总数小于time时,就以每毫秒递增1的形式增加;2.总数大于500,计算出每毫秒至少要递增多少
    6. const timer = setInterval(() => {
    7. setCount((pre) => (pre + step > counts ? counts : pre + step));
    8. }, 1);
    9. return () => clearInterval(timer);
    10. }, [counts]);
    11. return count;
    12. }
    13. export default Counter;

    2.固定时间,代码如下:

    1. import {useEffect, useRef, useState} from 'react';
    2. const Counter = ({counts, time = 500}) => { //counts:传入的数字,time: 默认500毫秒之内整个动画完成
    3. const [count, setCount] = useState(0);
    4. useEffect(() => {
    5. let startTime = Date.now();
    6. let duration = 2000;
    7. const timer = setInterval(() => {
    8. setCount(() => {
    9. //数字增长逻辑:.定时操作
    10. let after = Math.ceil((Date.now()-startTime)/duration*counts*100)/100;
    11. if(after > counts) {
    12. clearInterval(timer);
    13. after = counts;
    14. }
    15. return after;
    16. });
    17. }, 16);
    18. return () => clearInterval(timer);
    19. }, [counts]);
    20. return count;
    21. }
    22. export default Counter;

    然后就可以在其他代码中引用该组件了:

    Counter counts={500} />

    当然,还可以使用react-countup组件 来实现,步骤如下:

    在项目中install该组件

    npm install react-countup

    然后引入即可

    1. import CountUp from "react-countup";
    2. <CountUp start={0} end={100000} duration={3} />  

     上面组件的参数说明:

    • start: number 开始值
    • end: number 结束值
    • duration: number 动画完成用时,以秒为单位
    • decimals: number 小数位数
    • useEasing: boolean 设置宽松,一般情况是true
    • useGrouping: boolean 设置分组功能,设为true才能用千位分割器等功能
    • separator: string 指定千位分隔符的字符,比如说最常见的”,”
    • decimal: string 指定小数字符
    • prefix: string 动画值前缀
    • suffix: string 动画值后缀,可以加单位
    • className: string span元素的CSS类名
    • redraw: boolean 如果设置为true,CountUp组件将始终在每个重新渲染上进行动画处理。
    • onComplete: function 动画完成后调用的函数
    • onStart: function 在动画开始前调用的函数
    • easingFn: function Easing function,一般用不到
    • formattingFn: function 用于自定义数字格式的方法

    看一个例子:

    1. import React from 'react';
    2. import { render } from 'react-dom';
    3. import CountUp from 'react-countup';
    4. const onComplete = () => {
    5. console.log('Completed! ?');
    6. };
    7. const onStart = () => {
    8. console.log('Started! ?');
    9. };
    10. render(
    11. <CountUp
    12. className="account-balance"
    13. start={160527.0127}
    14. end={-875.0319}
    15. duration={2.75}
    16. useEasing={true}
    17. useGrouping={true}
    18. separator=" "
    19. decimals={4}
    20. decimal=","
    21. prefix="EUR "
    22. suffix=" left"
    23. onComplete={onComplete}
    24. onStart={onStart}
    25. />,
    26. document.getElementById('root'),
    27. );

     

  • 相关阅读:
    内存函数介绍
    香港服务器租用流程步骤有哪些?
    基于bp神经网络汽车自动变速器最佳挡位判断(Matlab代码实现)
    CSS中如何实现文字描边效果(Text Stroke)?
    软考-软件项目活动图详解
    【算法】【二叉树模块】求二叉树中最大搜索二叉子树,返回头结点
    springboot自定义注解防止表单重复提交
    【前端修炼场】 — 认识前端了解HTML(筑基期)
    剑指Offer--LeetCode刷题篇_day02
    新加坡服务器托管:开启全球化发展之门
  • 原文地址:https://blog.csdn.net/zhoupenghui168/article/details/133038014