JS实现大屏数字增长效果

楼主
我是社区第485122位番薯,欢迎点我头像关注我哦~

1595421438451836.gif

1. 概述

1.1 预期效果

实现数字增长效果,但是如果不使用该插件,希望单元格中的数字可以实现自动增长然后停下来的特效,那么该如何实现呢?效果下图所示:

注:这里的自动增长特效不是指实时刷新动态数据,只是针对一个数字实现从小到大增长然后停下来的效果,当然也可以结合刷新一起使用。

1595898274355096.gif

1.2 实现思路

模板 Web 属性下的预览设置界面添加加载结束事件,该方法同时支持 cpt 和 frm 报表,下面示例介绍 cpt 报表中实现数值增长的方法。

2. 示例

2.1 设计模板

1)新建一个 cpt 模板,设计器菜单栏点击模板>纸张背景,将纸张背景改为墨蓝色,如下图所示:

1595828030146520.png

2)在 A2 单元格中添加公式:RANDBETWEEN(112234567,512456899)用来生成9位随机数。

3)在 B2 单元格添加人民币符号,C2 单元格中添加公式:split(A2,""),切割 A2 单元格中的数字,设置 C2 单元格横向扩展,将 C2 单元格设置字体为 UniDreamLED 。

UniDreamLED 为 LED 样式的字体,设计器未内置,需要手动添加,点击下载字体包:UnidreamLED.rar (10.2 K),解压后按照文档:设计器导入字体 进行添加。

2.png

4)设计器菜单栏点击模板>模板Web属性分页预览设置下添加一个加载结束事件,如下图所示:

1595828341116736.png

JavaScript 代码如下:

注:代码中用到的 jQuery 选择器,为前端预览时控制台调试获取。

setTimeout(function() {
var totalNum = $(".x-table").find("td[id^=A2-]").text();
//var totalNum = 889962321;
var nums = 0;
// 调用计时函数
setTimeout(timedCount(nums),10);
// 循环计时函数, 多次调用自身函数, nums为被传递的参数
function timedCount(nums){
var count = Math.round(totalNum/30);//设置叠加次数,数量越大,加的越慢,反之越快
nums = nums+count;
//document.getElementById('A2-0-3313').value =nums
 $(".x-table").find("td[id^=A2-]").text(nums);
 			   var n = String(nums).split('');
                  if(n.length==9){

                           $(".x-table").find("td[id^=C2-]").text(n[0])
                           $(".x-table").find("td[id^=D2-]").text(n[1])
        					$(".x-table").find("td[id^=E2-]").text(n[2])
        					$(".x-table").find("td[id^=F2-]").text(n[3])
        					$(".x-table").find("td[id^=G2-]").text(n[4])
        					$(".x-table").find("td[id^=H2-]").text(n[5])
        					$(".x-table").find("td[id^=I2-]").text(n[6])
        					$(".x-table").find("td[id^=J2-]").text(n[7]) 
        					$(".x-table").find("td[id^=K2-]").text(n[8])  

                       }
                   else if(n.length==8){
                   	$(".x-table").find("td[id^=C2-]").text(0)
                   			$(".x-table").find("td[id^=D2-]").text(n[0])
        					$(".x-table").find("td[id^=E2-]").text(n[1])
        					$(".x-table").find("td[id^=F2-]").text(n[2])
        					$(".x-table").find("td[id^=G2-]").text(n[3])
        					$(".x-table").find("td[id^=H2-]").text(n[4])
        					$(".x-table").find("td[id^=I2-]").text(n[5])
        					$(".x-table").find("td[id^=J2-]").text(n[6]) 
        					$(".x-table").find("td[id^=K2-]").text(n[7])     
                        }
                    else if(n.length==7){
                    		$(".x-table").find("td[id^=C2-]").text(0)
                   			$(".x-table").find("td[id^=D2-]").text(0)
                   			$(".x-table").find("td[id^=E2-]").text(n[0])
        					$(".x-table").find("td[id^=F2-]").text(n[1])
        					$(".x-table").find("td[id^=G2-]").text(n[2])
        					$(".x-table").find("td[id^=H2-]").text(n[3])
        					$(".x-table").find("td[id^=I2-]").text(n[4])
        					$(".x-table").find("td[id^=J2-]").text(n[5]) 
        					$(".x-table").find("td[id^=K2-]").text(n[6]) }
      					
        					  
// 设置条件使停止计时
if (nums<totalNum) {
setTimeout(function(){timedCount(nums)},50);
}else{
$(".x-table").find("td[id^=A2-]").text(totalNum);
var n = String(totalNum).split('');
                  if(n.length==9){

                           $(".x-table").find("td[id^=C2-]").text(n[0])
                           $(".x-table").find("td[id^=D2-]").text(n[1])
        					$(".x-table").find("td[id^=E2-]").text(n[2])
        					$(".x-table").find("td[id^=F2-]").text(n[3])
        					$(".x-table").find("td[id^=G2-]").text(n[4])
        					$(".x-table").find("td[id^=H2-]").text(n[5])
        					$(".x-table").find("td[id^=I2-]").text(n[6])
        					$(".x-table").find("td[id^=J2-]").text(n[7]) 
        					$(".x-table").find("td[id^=K2-]").text(n[8])  

                       }
                   else if(n.length==8){
                   	$(".x-table").find("td[id^=C2-]").text(0)
                   			$(".x-table").find("td[id^=D2-]").text(n[0])
        					$(".x-table").find("td[id^=E2-]").text(n[1])
        					$(".x-table").find("td[id^=F2-]").text(n[2])
        					$(".x-table").find("td[id^=G2-]").text(n[3])
        					$(".x-table").find("td[id^=H2-]").text(n[4])
        					$(".x-table").find("td[id^=I2-]").text(n[5])
        					$(".x-table").find("td[id^=J2-]").text(n[6]) 
        					$(".x-table").find("td[id^=K2-]").text(n[7])     
                        }//数字长度不足8位时,首位填充0
                    else if(n.length==7){
                    		$(".x-table").find("td[id^=C2-]").text(0)
                   			$(".x-table").find("td[id^=D2-]").text(0)
                   			$(".x-table").find("td[id^=E2-]").text(n[0])
        					$(".x-table").find("td[id^=F2-]").text(n[1])
        					$(".x-table").find("td[id^=G2-]").text(n[2])
        					$(".x-table").find("td[id^=H2-]").text(n[3])
        					$(".x-table").find("td[id^=I2-]").text(n[4])
        					$(".x-table").find("td[id^=J2-]").text(n[5]) 
        					$(".x-table").find("td[id^=K2-]").text(n[6]) 
        					} //数字长度不足7位时,前两位填充0

}
}
},200);//延时,让页面加载完读取数据

2.2 效果预览

保存报表,点击分页预览,效果如下图所示:

1595898274355096.gif

注:不支持移动端。

3. 模板下载

点击下载模板:JS实现大屏数字增长效果.rar (2.43 K)

点击下载字体包:UnidreamLED.rar (10.2 K)

分享扩散:

沙发
发表于 2022-10-16 09:43:30
这是帮助文档改成论坛文章了吗?
板凳
发表于 2023-7-7 09:52:15

谢谢大佬,非常感谢!

地板
发表于 2023-10-29 21:19:15
怎么能让数据库的值更新后他也更新呢~
5楼
发表于 2023-11-4 12:35:04
学习了,谢谢分享
6楼
发表于 2024-7-12 19:02:34
好奇怪,在frm模板下设置了 但没有生效。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表