TypeScript 简单实用数字动画

先上效果图:


GIF 2020-1-6 15-58-38.gif

一、首先安装TypeScript,在node上执行npm install -g typescript命令。
二、ts文件需要我们每次编写完成以后都要执行一下命令去编译它,才会生成一个js文件
因此我们执行tsc -init命令,在项目中生成一个json文件,并对json文件进行修改。


image.png

三、在scr中创建html文件,引入生成后的文件。
image.png

四、编写ts文件,并进行编译。我们执行tsc -w命令就会自动对我们保存的ts代码进行编译,并根据json文件中的配置进行打包分配。
五、展示TypeScript代码

/*方法说明
*@method fmoney 保留两位小数
*@for 所属类名
*@param {Number} s  需要保留的数据
*@param {Number} n  保留几位小数,0-20之间
*@return {string} 返回数据
*/
function fmoney(s:(number|string), n:number=2):string {
    s = s||0
    n = n > 0 && n <= 20 ? n : 2;
    s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
    var l = s.split('.') [0].split('').reverse(),
    r = s.split('.') [1];
    var  t = '';
    for (var i = 0; i < l.length; i++)  {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
    }
    return t.split('').reverse().join('') + '.' + r;
};
//接口 关于numberAnimation 函数中第一个变量的声明
interface optionObject { 
    time: number,
    finalNum: number,
    stepTime: number,
    digits:number
}
/*方法说明
*@method numberAnimation 数字自动变化
*@for 所属类名
*@param {Object} option 配置项
option:{
    time:总时间
    finalNum:数字
    stepTime:调速器
    digits:默认开始数据几位数
}
*@return {string} 返回数据
*/

function numberAnimation(option:optionObject,target:string):any{
    option=option||{};
    let $this=document.getElementById(target);
    if (!$this) { 
        alert("未找到该结构!");
        return
    }
    let time=option.time||0;//总耗时
    let finalNum=option.finalNum||0;//最终的数据
    let stepTime=option.stepTime||100;//调速器,改变stepTime,可以改变数字改变的速率
    let digits=option.digits||2;//默认开始数据几位数
    let temp=String(Math.pow(10,digits)).replace("1",'');
    let l=temp.split("").reverse();
    var  t = '';
    for (var i = 0; i < l.length; i++)  {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
    }
    $this.innerHTML=t.split('').reverse().join('') + '.00' ;
    let step=finalNum/(time/stepTime);
    let count=0;//计时器
    let timer=setInterval(()=>{
        count=Number(count)+step;
        if(count>=finalNum){
            clearInterval(timer);
            count=finalNum;
        }
        if ($this) { 
            $this.innerHTML=fmoney(count);
        }
    },30)
}
let btn = document.querySelector("button");
if (btn) { 
    btn.addEventListener("click",()=>{
        numberAnimation({time:1500,finalNum:382671.89,stepTime:50,digits:5},'time');        
    })
}

最后编译生成的js文件展示如下

"use strict";
/*方法说明
*@method fmoney 保留两位小数
*@for 所属类名
*@param {Number} s  需要保留的数据
*@param {Number} n  保留几位小数,0-20之间
*@return {string} 返回数据
*/
function fmoney(s, n) {
    if (n === void 0) { n = 2; }
    s = s || 0;
    n = n > 0 && n <= 20 ? n : 2;
    s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
    var l = s.split('.')[0].split('').reverse(), r = s.split('.')[1];
    var t = '';
    for (var i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
    }
    return t.split('').reverse().join('') + '.' + r;
}
;
function numberAnimation(option, target) {
    option = option || {};
    var $this = document.getElementById(target);
    if (!$this) {
        alert("未找到该结构!");
        return;
    }
    var time = option.time || 0; //总耗时
    var finalNum = option.finalNum || 0; //最终的数据
    var stepTime = option.stepTime || 100; //调速器,改变stepTime,可以改变数字改变的速率
    var digits = option.digits || 2; //默认开始数据几位数
    var temp = String(Math.pow(10, digits)).replace("1", '');
    var l = temp.split("").reverse();
    var t = '';
    for (var i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
    }
    $this.innerHTML = t.split('').reverse().join('') + '.00';
    var step = finalNum / (time / stepTime);
    var count = 0; //计时器
    var timer = setInterval(function () {
        count = Number(count) + step;
        if (count >= finalNum) {
            clearInterval(timer);
            count = finalNum;
        }
        if ($this) {
            $this.innerHTML = fmoney(count);
        }
    }, 30);
}
var btn = document.querySelector("button");
if (btn) {
    btn.addEventListener("click", function () {
        numberAnimation({ time: 1500, finalNum: 382671.89, stepTime: 50, digits: 5 }, 'time');
    });
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容