JavaScript如何实现余额数字滚动效果
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,今天就跟大家聊聊有关JavaScript如何实现余额数字滚动效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.实现背景上周在一个完成任务领
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
黑客技术和网络安全有什么关联
厦门睿游网络技术公司
cf的服务器卡的很
网络安全哪个国家最强
吴中区进口网络技术推荐咨询
福建信息化软件开发价格大全
谷歌服务器的云盘怎么用
新疆新科达软件开发有限公司招聘
国家网络安全周的宣传主题
上海服务器管理中心失火
ug如何恢复数据库
服务器质量
服务器可以安装在显示器上吗
社区组织网络安全宣传周
机房服务器内网ip
华为软件开发岗试题
一个服务器可以装几个数据库
学生营养信息数据库表格
为什么要软件开发
什么是银行网络安全
安卓网页游戏服务器
软件开发报表怎样传到电视上
服务器户名密码
高中毕业学软件开发
怎么给数据库的表添加信息
如何改网络安全密钥
公司未制定网络安全事件应急预案
数据库字母加数字是什么类型
我国互联网科技企业
mfa会员说软件开发