JavaScript如何实现余额数字滚动效果
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,今天就跟大家聊聊有关JavaScript如何实现余额数字滚动效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.实现背景上周在一个完成任务领
千家信息网最后更新 2025年11月14日JavaScript如何实现余额数字滚动效果1.实现背景
2.实现思路
3.实现过程
今天就跟大家聊聊有关JavaScript如何实现余额数字滚动效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1.实现背景
上周在一个完成任务领取红包的活动需求中,需要实现一个用户点击按钮弹出领取红包弹窗后,在关 闭弹窗返回原来的页面时,页面余额数字部分要展示一个每一位数字滚动后的效果。
因为之前没做过这样的效果,一开始也不知道要如何实现,本来想在GitHub上找一下相关的库,看到一个最高star的库,但发现它是依赖jQuery的,而且不可以npm包引入。感觉就很没有必要,本来项目是react框架的,就是要尽量少的操作DOM,为了解决这个滚动就要引入jQuery,感觉不太合适。所以我决定还是自己实现,先看了一下别人的思路,然后自己再去实现。
2.实现思路
其实就是将传入的带滚动的n位数字拆分成每一个要滚动的数,然后动态的创建装着滚动到每一位相应数字的容器,然后放入传入的目标容器中。滚动到每一位相应的数字的实现可以通过动态创建从0到相应数字的间隔数的div,div的内容分别为对应的数字,就像一个竖直写着从0-n的长纸条,然后拉着它在指定时间内从0上拉到目标数字。
3.实现过程
既然要封装,还是写成class的形式吧,话不多说,直接上代码吧
/** * 实现数字滚动的效果的类 */class DigitScroll { constructor(options) { //获取容器的DOM,没有则抛出错误 this.container = document.querySelector(options.container); if (!this.container) { throw Error("no container"); } this.container.style.overflow = "hidden"; this.container.style.display = "flex"; //可视容器高度 也是滚动间隔距离,容器要设置高度,否则默认30px this.rollHeight = parseInt(getComputedStyle(this.container).height) || 30; this.container.style.height = this.rollHeight + "px"; } roll(num) { // 将传入的要滚动的数字拆分后初始化每一位数字的容器 this.initDigitEle(num); const numEles = this.container.querySelectorAll(".single-num"); // 遍历生成每一位数字的滚动队列,如滚动到7,则生成内容为0,1,2,3,4,5,6,7的7个div,用于滚动动画 [...numEles].forEach((numEle, index) => { const curNum = 0; let targetNum = Number(this.numberArr[index]); if (curNum >= targetNum) { targetNum = targetNum + 10; } let cirNum = curNum; // 文档碎片,拼凑好后一次性插入节点中 const fragment = document.createDocumentFragment(); // 生成从0到目标数字对应的div while (targetNum >= cirNum) { const ele = document.createElement("div"); ele[xss_clean] = cirNum % 10; cirNum++; fragment.appendChild(ele); } numEle[xss_clean] = ""; numEle.appendChild(fragment); //重置位置 numEle.style.cssText += "-webkit-transition-duration:0s;-webkit-transform:translateY(0)"; setTimeout(() => { numEle.style.cssText += `-webkit-transition-duration:1s;-webkit-transform:translateY(${ -(targetNum - curNum) * this.rollHeight }px);`; }, 50); }); } // 初始化容器 initDigitEle(num) { // 数字拆分位数 const numArr = num.toString().split(""); // 文档碎片,拼凑好后一次性插入节点中 const fragment = document.createDocumentFragment(); numArr.forEach((item) => { const el = document.createElement("div"); // 数字是要滚动的,非数字如.是不滚动的 if (/[0-9]/.test(item)) { el.className = "single-num"; el.style.height = this.rollHeight + "px"; el.style.lineHeight = this.rollHeight + "px"; } else { el[xss_clean] = item; el.className = "no-move"; el.style.verticalAlign = "bottom"; } // el.style.float='left'; fragment.appendChild(el); }, []); this.container[xss_clean] = ""; this.container.appendChild(fragment); // 存储滚动的数字 this.numberArr = numArr.filter((item) => /[0-9]/.test(item)); }}看完上述内容,你们对JavaScript如何实现余额数字滚动效果有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数字
容器
效果
内容
余额
目标
生成
一次性
动态
就是
思路
感觉
文档
碎片
红包
节点
还是
页面
高度
合适
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
excel数据库教程下载
软件开发定制厂家价格
代理服务器 下载文件
席瓦莱恩服务器炸了
玄中记服务器
离开对日软件开发后不适应
ssd云服务器评测
华为对网络安全的定义是指
锤子手机用的哪个数据库
服务器散热风扇转速一般达到多少
服务器运维是机房运维么
网络安全保护情报
深圳智慧云端软件开发公司
网络安全是程序员吗
网络安全10条规定
2008服务器配置与管理
国考申论网络安全
linux把数据库导出
聊天软件开发书
我眼中的网络技术作文800
软件开发技术施工方案提交时间
java软件开发转安全
贵阳网络安全系统怎么选
服务器散热风扇转速一般达到多少
软件开发的市场评估
杭州庙街网络技术有限公司
重庆专业服务器虚拟主机
云数据库应用
麒麟系统数据库版本号
优秀文档管理软件开发