数字滚动特效实现(react + d3)

让数字动起来~

实现效果

在这里插入图片描述

使用d3封装数字滚动组件,PlayNumber.tsx

import { useEffect, useRef, useState } from 'react';
import * as d3 from 'd3';

const PlayNumber = (props: any) => {
  const numberRef: any = useRef();
  const { number } = props;
  const [oldNumber, setOldNumber] = useState(0);
  const playCounter = (ref: any, start: number, end: number) => {
    d3.select(ref)
      .text(end)
      .transition()
      .duration(1000)
      .tween('text', () => {
        const i = d3.interpolate(start, end);
        return (t: any) => {
          ref.textContent = Math.round(i(t));
        };
      });
  };
  useEffect(() => {
    playCounter(numberRef.current, oldNumber, number);
    setOldNumber(number);
  }, [number]);
  return <span ref={numberRef}>0</span>;
};
export default PlayNumber;

项目中的使用示例

      <ul className="card-project-number">
        <li>
          <PlayNumber number={total} />
          <div>本年度项目总数</div>
        </li>
        <li>
          <div className="project-status primary">未开始</div>
          <PlayNumber number={notStart} />
        </li>
        <li>
          <div className="project-status success">进行中</div>
          <PlayNumber number={progress} />
        </li>
        <li>
          <div className="project-status warning">已完成</div>
          <PlayNumber number={finished} />
        </li>
      </ul>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值