JS- 数字自增动画
如题
<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- 数字自增动画相关推荐
- js数字累加 · 递增动画 - 封装篇
js数字累加 · 递增动画 - 代码可封装 代码如下: <!DOCTYPE html> <html> <head> <meta charset="U ...
- js数字金额滚动动画(vue)
vue金额滚动动画 效果预览 QQ20190124-0.gif <template><div><div class="head" @click=&qu ...
- jquery 数字滚动特效 数字自增特效 数字位数动态适应
最近做了个大项目,需要在首页动画显示实时统计数据,虽然百度了不少jquery特效,但有的需要积分,有的功能不全面,下面我将源码分享出来. html <!DOCTYPE html> < ...
- js进阶 13-6 jquery动画效果相关常用函数有哪些
js进阶 13-6 jquery动画效果相关常用函数有哪些 一.总结 一句话总结:animate(),stop(),finish(),delat()四个. 1.stop()方法的基本用法是什么(sto ...
- js课程 5-14 js如何实现控制动画角色走动
js课程 5-14 js如何实现控制动画角色走动 一.总结 一句话总结:首先是onkeydown事件,然后是改变元素的left和top属性 1.常用键盘事件有哪些? • onkeydown和 onke ...
- android扑克发牌动画,JS实现纸牌发牌动画
本文实例为大家分享了JS实现纸牌发牌动画的具体代码,供大家参考,具体内容如下 先看演示 游戏构建准备 1.准备52张纸牌 2.一张桌布 3.编辑工具为 Visual Code 技术概要 1.对象操作 ...
- 一篇文章教会你创建vue项目和使用vue.js实现数据增删改查
简介:一篇文章教会你创建vue项目和使用vue.js实现数据增删改查 [一.项目背景] 在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品.修改商品价格.删除商品 ...
- js操作indexedDB增删改查示例
js操作indexedDB增删改查示例 if ('indexedDB' in window) {// 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本var req ...
- Vue.js 相关知识(动画)
1. 简介 Vue 在插入.更新或移除 DOM 时,提供多种不同方式的过渡效果,并提供 transition 组件来实现动画效果(用 transition 组件将需执行过渡效果的元素包裹) 语法:&l ...
- js数字最多保留两位小数_8085微处理器中最多两个8位数字
js数字最多保留两位小数 Problem statement: 问题陈述: To find maximum of two 8bit numberusing 8085 microprocessor. 使 ...
最新文章
- Vue 应用 Sass、Scss、Less 和 Stylus
- 轻量级流程图控件GoJS示例连载(一):最小化
- 1.13 Predicate操作Collection集合
- Linux 下的截屏并编辑的工具介绍
- 怎么样武直不打_打HPV疫苗期间意外怀孕?怎么办?
- java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...
- 【Verilog HDL】语句的并发执行
- 【机器视觉学习笔记】python安装OpenCV并设置自动补全及代码提示
- WindowsAPI----AttachThreadInput使用
- css 平行四边形 梯形 组合_微课|人教版五年级数学上册6.4组合图形的面积(P99)...
- 网页设计中JS与Java的区别
- 有线电信服务全球市场:未来三年复合年增长率将放缓
- 小米蓝牙音响驱动_广场舞阿姨的最爱,户外野营者的必备,小米华为都甘拜下风的便携音箱...
- 连锁店管理系统有什么特点?便利店管理系统的优势
- Xiaojie雷达之路---TI实战笔记---OSAL详解
- 医院绩效考核管理平台建设方案
- win7字体_潇洒个性艺术!100款英文手写签名字体
- 每日学习(Git和Github)
- 解读常见传感器的CFA排列(彩色滤色矩阵,Color Filter Array)
- 字节跳动2019春招算法题
热门文章
- 4G核心网与IMS有什么区别
- 【智能优化算法】基于寄生捕食优化算法求解单目标优化问题(Parasitism Predation algorithm,PPA)含Matlab源码
- 云来观点:云来Light app优于百度轻应用
- 一文讲解,Linux内核——Memory Barrier(内存屏障)
- 燃气事故现场处置应急预案
- 工具人在使用ppt时的一些经验和想法
- 软件质量测试大作业示例
- com.xxx.common.service.xxxService‘ that could not be found.异常 @Autowire注入失败
- 2019.6.14 巴塞尔问题
- MOPSO算法总结,包括OMOPSO,SMPSO,dMOPSO,CMPSO,DDMOPSO,MMOPSO等