效果图

给数字做了逗号符分割,更符合国际大额数字的浏览效果。

/** @Descripttion:* @version:* @Author: dal* @Date: 2021-11-02 16:48:26* @LastEditors: dal* @LastEditTime: 2021-11-03 13:50:43*/
import "./counter.less"
import { Component } from "react";
class Counter extends Component {constructor(props: any) {super(props)console.log(props)this.state = {num: props.num,//初始化的值,由父组件传递listAll: [],//数字有多少位就有多少个二维数组}}componentDidMount() {this.run()setInterval(() => {this.run()}, 4000)}run() {this.getNumber()}getNumber() {let { num } = this.statelet random = Math.floor(Math.random() * (100000 - 1) + 1); //加随机数this.setState({num: num + random})this.getData(num, num + random)}getData(prev: number, next: number) {this.start(this.getDecimal(prev), this.getDecimal(next))}getDecimal(num: number): string {return num.toLocaleString()}start(prev: string, next: string) {console.log(prev, next)let numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']let arr = []for (let n = 0; n < next.length; n++) {let start = -1;let end = -1;//先判断是不是【,】,如果是的话直接放入数组中if (next[n] === ",") {} else if (n < prev.length) {prev[n] !== "," ? start = numbers.findIndex(s => s == prev[n]) : ""end = start < numbers.findIndex(s => s == next[n]) ? numbers.findIndex(s => s == next[n]) : numbers.lastIndexOf(next[n])} else {end = numbers.findIndex(s => s == next[n])}if (start === -1 && end !== -1) start = 0console.log(start, end + 1)arr.push(numbers.slice(start, end + 1))}console.log(arr)this.setState({listAll: arr})}render() {let { listAll } = this.statereturn (<div><div className="box-number">{listAll.map((list: number[], i: number) => {return <div key={i} className="list-wrap"><div className={`roll roll_${list.length - 1}`} key={i}>{list.length === 0 ? <div>,</div> :list.map((item, index) => {return <div key={index}>{item}</div>})}</div></div>})}</div></div>)}
}
export default Counter
/* 数字滚动 */
.box-number {/* background: green; */display: flex;flex-direction: row;justify-content: center;align-items: center;
}.list-wrap {height: 3rem;text-align: center;overflow: hidden;margin: 0.1rem;
}.roll div {font-size: 2rem;line-height: 3rem;
}.roll_1 {animation: roll_1 2s forwards;/* Safari 与 Chrome */
}.roll_2 {animation: roll_2 2s forwards;/* Safari 与 Chrome */
}.roll_3 {animation: roll_3 2s forwards;/* Safari 与 Chrome */
}.roll_4 {animation: roll_4 2s forwards;/* Safari 与 Chrome */
}.roll_5 {animation: roll_5 2s forwards;/* Safari 与 Chrome */
}.roll_6 {animation: roll_6 2s forwards;/* Safari 与 Chrome */
}.roll_7 {animation: roll_7 2s forwards;/* Safari 与 Chrome */
}.roll_8 {animation: roll_8 2s forwards;/* Safari 与 Chrome */
}/*省略roll_2——roll_8*/.roll_9 {animation: roll_9 2s forwards;/* Safari 与 Chrome */
}@keyframes roll_1 {0% {transform: translate3d(0, 0, 0);}100% {transform: translate3d(0, -3rem, 0);}
}@keyframes roll_2/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -6rem, 0);}
}@keyframes roll_3/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -9rem, 0);}
}@keyframes roll_4/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -12rem, 0);}
}@keyframes roll_5/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -15rem, 0);}
}@keyframes roll_6/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -18rem, 0);}
}@keyframes roll_7/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -21rem, 0);}
}@keyframes roll_8/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -24rem, 0);}
}@keyframes roll_9/* Safari 与 Chrome */{0% {transform: translate3d(0, 0px, 0);}100% {transform: translate3d(0, -27rem, 0);}
}

react 数字滚动组件相关推荐

  1. 数字滚动组件(react)

    基于react实现一个数字滚动组件(vue也一样,逻辑相同) 直接上代码 1.number-roll.tsx interface NumberRollProps {value: number; } c ...

  2. 初级开发者福音:手把手教你实现数字滚动效果~

    文章目录 一.前言 二.背景知识 三.实现方案 Step 1:分析需求 Step 2:实现单个数字的滚动效果 Step 3:组件接口设计 Step 4:完善组件 一.前言 前端数字滚动显示的场景很多, ...

  3. php实现数字滚动效果,vue如何实现数字滚动增加效果?代码示例

    项目中需要做数字滚动增加的效果,一开始很懵,研究了一下原理,发现很简单,贴出来分享一下 ^_^ 数字滚动组件: 0 props: { time: { type: Number, default: 2 ...

  4. Vue 实现数字滚动效果

    效果就是显示某个数值不是直接显示,而是从0开始滚动,直到为那个数值时停止滚动 1.新建数字滚动组件:test.vue文件 <template><div class="num ...

  5. css 数字滚动效果

    先看效果图 一.前置条件 首先了解两个css字符排版的样式 1. writing-mode 设置文本行是水平还是垂直布局 horizontal-tb:默认值,表示水平排版,从上到下 vertical- ...

  6. Vue组件——数字滚动抽奖效果

    闲话不多说(希望对大家有帮助),那就直接上代码吧 可调整数字滚动速度,可指定开奖延迟时间,可指定开奖数字,按个人需求自行改动(录了个效果供参考,临时找的录屏,表介意) 不一一精简了 组件代码 < ...

  7. vue数字滚动效果组件

    数字滚动变化效果组件 效果 预览 体验地址 用途 大屏展示,数字滚动效果 实现 使用js控制元素移动. 关键代码如下: //修改 chang(oldVal,newVal,id){if(oldVal & ...

  8. 【React】手写虚拟滚动组件(二)可自动获取不定高度的虚拟滚动组件

    前言 上次那篇写的虚拟滚动后来使用发现在某些情况并不是特别好用,并且只支持固定高度.我看了下umihook的虚拟滚动,发现也不是很好用,它支持手动设定每个元素高度,但也不能支持不定高度,而且限定更多了 ...

  9. 【react】InfiniteScroll 滚动组件

    在data.d.ts中定义父组件所需要传的值 import { ReactNode } from 'react' type PullStatus = 'pulling' | 'canRelease' ...

最新文章

  1. android百度地图更换定位图标,android百度地图定位,改变MyLocationOverlay默认图标(原始为蓝色点)(两种方法)...
  2. Linux下搜索文件常用方法
  3. 神策数据:游戏企业如何做产品 A/B 测试?三大案例一次搞懂
  4. shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作
  5. java使用monkeyrunner_MonkeyRunner 实践----用 java 来编写脚本
  6. script标签中defer和async的区别
  7. Graph_editor——好用的画图软件,你会用吗?
  8. 解决aqua data studio 中文乱码问题
  9. PowerDesigner16.5下载和安装教程
  10. Python3学习笔记(1): print函数用法总结
  11. 数字后端基本概念介绍Wire
  12. 高等数学:第八章 多元函数的微分法及其应用(6)微分法在几何上的应用
  13. PTA-寻找孪生素数
  14. sip服务器支持alg,SIP利用Tunnel與ALG方法穿越NAT之效能分析
  15. Xcode iOS开发:UIKit常用组件之按钮控件
  16. 鲸探发布点评:9月21日发售高分一号、七号卫星数字藏品
  17. python爬虫58同城租房
  18. 手机版kali nethunter刷入
  19. BSD维基百科,自由的百科全书
  20. Lua服务器框架 crossover

热门文章

  1. 神雕侠侣手游服务器维修,《神雕侠侣》2021年3月11日更新维护新服开启公告
  2. C++中函数模板的返回值是模板类型参数的调用方法
  3. 笔记本键盘敲K,L,M变为2,3,0的解决方法
  4. 参数估计——极大似然估计与贝叶斯估计
  5. hadoop单机版配置
  6. 360数科港交所上市:市值超160亿港元 周鸿祎为大股东
  7. Bootstrapping sample
  8. 漫画大全《浴血商后》
  9. Mac技巧:解决Siri无法正常运行的问题
  10. 自定义http报头_为HttpClient添加默认请求报头的四种解决方案