当前位置: 首页 > news >正文

countUp.js-数字滚动效果(简单基础使用)

  最近写了个移动端宣传页,里面有数字的效果,所以有使用到countUp.js。

  以下内容有包括:h5页面countUp.js的引入和实例、参数说明、事件简单使用和描述、countUp.js源代码

  附上countUp.js的gitHub地址:http://inorganik.github.io/countUp.js/  

  • 效果

  

 

 

  • 重点部分-参数

  

  • h5页面代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .content{
            text-align: center
        }
    </style>
    <script src="./js/countUp.js"></script>
</head>
<body>
    <div class="content">数字一:<span id="num1"></span></div>
    <div class="content"><button οnclick="start()">开始</button><button οnclick="pause()">暂停</button><button οnclick="reset()">重置</button><button οnclick="updata()">更新值</button></div>
    <div class="content">数字二:<span id="num2"></span></div>
</body>
<script>
    var options={
        useEasing: true,  // 过渡动画效果,默认ture
        useGrouping: true,  // 千分位效果,例:1000->1,000。默认true
        separator: ',',   // 使用千分位时分割符号
        decimal: '.',   // 小数位分割符号
        prefix: '',    // 前置符号
        suffix: ''    // 后置符号,可汉字
    }
    // target,startVal,endVal,decimals,duration,options
    // dom节点, 初始值,  结束值, 小数位数, 过渡几秒 , 初始参数 
    var num1 = new CountUp('num1', 0, 100, 0, 2,options),
        num2 = new CountUp('num2', 0, 200, 0, 2,options)

    function start(){
        // 开始
        num1.start()
    }
    function pause(){
        // 暂停或继续
        num1.pauseResume()
    }
    function reset(){
        // 重置初始值
        num1.reset()
    }
    function updata(){
        // 重新赋值
        num1.update(888)
    }
</script>
</html>
  • countUp.js
var CountUp=function(target,startVal,endVal,decimals,duration,options){var self=this;self.version=function(){return"1.9.2"};self.options={useEasing:true,useGrouping:true,separator:",",decimal:".",easingFn:easeOutExpo,formattingFn:formatNumber,prefix:"",suffix:"",numerals:[]};if(options&&typeof options==="object"){for(var key in self.options){if(options.hasOwnProperty(key)&&options[key]!==null){self.options[key]=options[key]}}}if(self.options.separator===""){self.options.useGrouping=false}else{self.options.separator=""+self.options.separator}var lastTime=0;var vendors=["webkit","moz","ms","o"];for(var x=0;x<vendors.length&&!window.requestAnimationFrame;++x){window.requestAnimationFrame=window[vendors[x]+"RequestAnimationFrame"];window.cancelAnimationFrame=window[vendors[x]+"CancelAnimationFrame"]||window[vendors[x]+"CancelRequestAnimationFrame"]}if(!window.requestAnimationFrame){window.requestAnimationFrame=function(callback,element){var currTime=new Date().getTime();var timeToCall=Math.max(0,16-(currTime-lastTime));var id=window.setTimeout(function(){callback(currTime+timeToCall)},timeToCall);lastTime=currTime+timeToCall;return id}}if(!window.cancelAnimationFrame){window.cancelAnimationFrame=function(id){clearTimeout(id)}}function formatNumber(num){num=num.toFixed(self.decimals);num+="";var x,x1,x2,x3,i,l;x=num.split(".");x1=x[0];x2=x.length>1?self.options.decimal+x[1]:"";if(self.options.useGrouping){x3="";for(i=0,l=x1.length;i<l;++i){if(i!==0&&((i%3)===0)){x3=self.options.separator+x3}x3=x1[l-i-1]+x3}x1=x3}if(self.options.numerals.length){x1=x1.replace(/[0-9]/g,function(w){return self.options.numerals[+w]});x2=x2.replace(/[0-9]/g,function(w){return self.options.numerals[+w]})}return self.options.prefix+x1+x2+self.options.suffix}function easeOutExpo(t,b,c,d){return c*(-Math.pow(2,-10*t/d)+1)*1024/1023+b}function ensureNumber(n){return(typeof n==="number"&&!isNaN(n))}self.initialize=function(){if(self.initialized){return true}self.error="";self.d=(typeof target==="string")?document.getElementById(target):target;if(!self.d){self.error="[CountUp] target is null or undefined";return false}self.startVal=Number(startVal);self.endVal=Number(endVal);if(ensureNumber(self.startVal)&&ensureNumber(self.endVal)){self.decimals=Math.max(0,decimals||0);self.dec=Math.pow(10,self.decimals);self.duration=Number(duration)*1000||2000;self.countDown=(self.startVal>self.endVal);self.frameVal=self.startVal;self.initialized=true;return true}else{self.error="[CountUp] startVal ("+startVal+") or endVal ("+endVal+") is not a number";return false}};self.printValue=function(value){var result=self.options.formattingFn(value);if(self.d.tagName==="INPUT"){this.d.value=result}else{if(self.d.tagName==="text"||self.d.tagName==="tspan"){this.d.textContent=result}else{this.d.innerHTML=result}}};self.count=function(timestamp){if(!self.startTime){self.startTime=timestamp}self.timestamp=timestamp;var progress=timestamp-self.startTime;self.remaining=self.duration-progress;if(self.options.useEasing){if(self.countDown){self.frameVal=self.startVal-self.options.easingFn(progress,0,self.startVal-self.endVal,self.duration)}else{self.frameVal=self.options.easingFn(progress,self.startVal,self.endVal-self.startVal,self.duration)}}else{if(self.countDown){self.frameVal=self.startVal-((self.startVal-self.endVal)*(progress/self.duration))}else{self.frameVal=self.startVal+(self.endVal-self.startVal)*(progress/self.duration)}}if(self.countDown){self.frameVal=(self.frameVal<self.endVal)?self.endVal:self.frameVal}else{self.frameVal=(self.frameVal>self.endVal)?self.endVal:self.frameVal}self.frameVal=Math.round(self.frameVal*self.dec)/self.dec;self.printValue(self.frameVal);if(progress<self.duration){self.rAF=requestAnimationFrame(self.count)}else{if(self.callback){self.callback()}}};self.start=function(callback){if(!self.initialize()){return}self.callback=callback;self.rAF=requestAnimationFrame(self.count)};self.pauseResume=function(){if(!self.paused){self.paused=true;cancelAnimationFrame(self.rAF)}else{self.paused=false;delete self.startTime;self.duration=self.remaining;self.startVal=self.frameVal;requestAnimationFrame(self.count)}};self.reset=function(){self.paused=false;delete self.startTime;self.initialized=false;if(self.initialize()){cancelAnimationFrame(self.rAF);self.printValue(self.startVal)}};self.update=function(newEndVal){if(!self.initialize()){return}newEndVal=Number(newEndVal);if(!ensureNumber(newEndVal)){self.error="[CountUp] update() - new endVal is not a number: "+newEndVal;return}self.error="";if(newEndVal===self.frameVal){return}cancelAnimationFrame(self.rAF);self.paused=false;delete self.startTime;self.startVal=self.frameVal;self.endVal=newEndVal;self.countDown=(self.startVal>self.endVal);self.rAF=requestAnimationFrame(self.count)};if(self.initialize()){self.printValue(self.startVal)}};

  

 

转载于:https://www.cnblogs.com/freedom-feng/p/11435364.html

相关文章:

  • Windows 搭建 nginx rtmp服务器
  • MySQL的sql_mode模式说明及设置
  • my read law / notarization / gongzheng
  • 我要成为怎么样的人
  • 虚拟机enp0s8网卡无法联网和开放linux端口
  • ANT下载和配置 IDEA
  • 目标检测: R-CNN原理
  • win10下cmake 编译tensorflow1.11.0
  • 目标检测: Fast R-CNN原理
  • webserver SVN / Subversion
  • VS开发C++控制台应用程序(示例)
  • WPF调用C++生成的dll文件(示例)
  • ffmpeg命令参数详解
  • Spring 注入多列和单列
  • 网络书籍
  • [译]Python中的类属性与实例属性的区别
  • 《Java编程思想》读书笔记-对象导论
  • Android优雅地处理按钮重复点击
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES6 学习笔记(一)let,const和解构赋值
  • JAVA SE 6 GC调优笔记
  • Java精华积累:初学者都应该搞懂的问题
  • Magento 1.x 中文订单打印乱码
  • mysql中InnoDB引擎中页的概念
  • nodejs:开发并发布一个nodejs包
  • nodejs调试方法
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Twitter赢在开放,三年创造奇迹
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我有几个粽子,和一个故事
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 计算机视觉入门
  • $ git push -u origin master 推送到远程库出错
  • (06)金属布线——为半导体注入生命的连接
  • (2015)JS ES6 必知的十个 特性
  • (31)对象的克隆
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)丶RabbitMQ的六大核心
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)visual stdio 书签功能介绍
  • ... 是什么 ?... 有什么用处?
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 生成二级域名
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET中统一的存储过程调用方法(收藏)