如题

 <span>¥ <AnimatedMoney>{number || '0.00'}</AnimatedMoney></span>
import React, { Component } from 'react';
import PropTypes from 'prop-types';export default class AnimatedMoney extends Component {timeContainer = '';index = 0;static propTypes = {dot: PropTypes.number, // 小数点位数animated: PropTypes.bool, // 是否有动画time: PropTypes.number, // 间隔时间micrometer: PropTypes.bool, // 是否有千分符children: PropTypes.number.isRequired};static defaultProps = {dot: 2,time: 20,micrometer: true,animated: true};constructor(props) {super(props);this.state = {displayValue: 0};}componentDidMount() {this.init();}init = () => {const { animated, micrometer, children } = this.props;const numberVal = this.toNumber(children);// 判断是否出现动画if (!animated || numberVal === 0) {let finalVal = children;if (!micrometer) {finalVal = this.deleteThousandSymbol(children);}this.setState({displayValue: finalVal});return;}const valArr = this.getRandomArr(numberVal);this.toSetInterval(valArr);}// 转成数字toNumber = (value) => {const { displayValue } = this.state;let val = value;if (val === undefined || val === null) {return 0;}if (typeof val === 'string') {if (this.isHaveThousandSymbol(value)) {val = this.deleteThousandSymbol(val);}return Number(val);} else if (typeof val === 'number') {return val;}return displayValue;}toStrging = (value) => {const { dot, micrometer } = this.props;return value.toLocaleString('en-US', { minimumFractionDigits: dot, maximumFractionDigits: dot, useGrouping: micrometer });}// 是否有千分符isHaveThousandSymbol = (val) => {return val.toString().includes(',');}// 删除千分符deleteThousandSymbol = (val) => {return (val.toString().replace(/,/g, ''));}// 生成滚动数组getRandomArr = (finalNumber) => {const valArr = [];let initVal = 0;const step = finalNumber / 25;for (let i = 0; i < 25; i += 1) {initVal = step * i;initVal = this.toStrging(initVal);valArr.push(initVal);}valArr.push(this.toStrging(finalNumber));return valArr;}// 设置定时器toSetInterval = (valArr) => {const { time } = this.props;this.timeContainer = setInterval(() => {this.setInnerData(valArr[this.index]);this.index += 1;if (this.index >= valArr.length) {clearTimeout(this.timeContainer);this.timeContainer = null;}}, time);}setInnerData = (val) => {this.setState({displayValue: val});}render() {const { displayValue } = this.state;return (<span>{displayValue}</span>);}
}

JS- 数字自增动画相关推荐

  1. js数字累加 · 递增动画 - 封装篇

    js数字累加 · 递增动画 - 代码可封装 代码如下: <!DOCTYPE html> <html> <head> <meta charset="U ...

  2. js数字金额滚动动画(vue)

    vue金额滚动动画 效果预览 QQ20190124-0.gif <template><div><div class="head" @click=&qu ...

  3. jquery 数字滚动特效 数字自增特效 数字位数动态适应

    最近做了个大项目,需要在首页动画显示实时统计数据,虽然百度了不少jquery特效,但有的需要积分,有的功能不全面,下面我将源码分享出来. html <!DOCTYPE html> < ...

  4. js进阶 13-6 jquery动画效果相关常用函数有哪些

    js进阶 13-6 jquery动画效果相关常用函数有哪些 一.总结 一句话总结:animate(),stop(),finish(),delat()四个. 1.stop()方法的基本用法是什么(sto ...

  5. js课程 5-14 js如何实现控制动画角色走动

    js课程 5-14 js如何实现控制动画角色走动 一.总结 一句话总结:首先是onkeydown事件,然后是改变元素的left和top属性 1.常用键盘事件有哪些? • onkeydown和 onke ...

  6. android扑克发牌动画,JS实现纸牌发牌动画

    本文实例为大家分享了JS实现纸牌发牌动画的具体代码,供大家参考,具体内容如下 先看演示 游戏构建准备 1.准备52张纸牌 2.一张桌布 3.编辑工具为 Visual Code 技术概要 1.对象操作 ...

  7. 一篇文章教会你创建vue项目和使用vue.js实现数据增删改查

    简介:一篇文章教会你创建vue项目和使用vue.js实现数据增删改查 [一.项目背景] 在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品.修改商品价格.删除商品 ...

  8. js操作indexedDB增删改查示例

    js操作indexedDB增删改查示例 if ('indexedDB' in window) {// 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本var req ...

  9. Vue.js 相关知识(动画)

    1. 简介 Vue 在插入.更新或移除 DOM 时,提供多种不同方式的过渡效果,并提供 transition 组件来实现动画效果(用 transition 组件将需执行过渡效果的元素包裹) 语法:&l ...

  10. js数字最多保留两位小数_8085微处理器中最多两个8位数字

    js数字最多保留两位小数 Problem statement: 问题陈述: To find maximum of two 8bit numberusing 8085 microprocessor. 使 ...

最新文章

  1. Vue 应用 Sass、Scss、Less 和 Stylus
  2. 轻量级流程图控件GoJS示例连载(一):最小化
  3. 1.13 Predicate操作Collection集合
  4. Linux 下的截屏并编辑的工具介绍
  5. 怎么样武直不打_打HPV疫苗期间意外怀孕?怎么办?
  6. java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. 【Verilog HDL】语句的并发执行
  8. 【机器视觉学习笔记】python安装OpenCV并设置自动补全及代码提示
  9. WindowsAPI----AttachThreadInput使用
  10. css 平行四边形 梯形 组合_微课|人教版五年级数学上册6.4组合图形的面积(P99)...
  11. 网页设计中JS与Java的区别
  12. 有线电信服务全球市场:未来三年复合年增长率将放缓
  13. 小米蓝牙音响驱动_广场舞阿姨的最爱,户外野营者的必备,小米华为都甘拜下风的便携音箱...
  14. 连锁店管理系统有什么特点?便利店管理系统的优势
  15. Xiaojie雷达之路---TI实战笔记---OSAL详解
  16. 医院绩效考核管理平台建设方案
  17. win7字体_潇洒个性艺术!100款英文手写签名字体
  18. 每日学习(Git和Github)
  19. 解读常见传感器的CFA排列(彩色滤色矩阵,Color Filter Array)
  20. 字节跳动2019春招算法题

热门文章

  1. 4G核心网与IMS有什么区别
  2. 【智能优化算法】基于寄生捕食优化算法求解单目标优化问题(Parasitism Predation algorithm,PPA)含Matlab源码
  3. 云来观点:云来Light app优于百度轻应用
  4. 一文讲解,Linux内核——Memory Barrier(内存屏障)
  5. 燃气事故现场处置应急预案
  6. 工具人在使用ppt时的一些经验和想法
  7. 软件质量测试大作业示例
  8. com.xxx.common.service.xxxService‘ that could not be found.异常 @Autowire注入失败
  9. 2019.6.14 巴塞尔问题
  10. MOPSO算法总结,包括OMOPSO,SMPSO,dMOPSO,CMPSO,DDMOPSO,MMOPSO等