js实现简单数字变动效果


Posted in Javascript onNovember 06, 2017

本文实例为大家分享了js实现数字变动效果展示的具体代码,供大家参考,具体内容如下

$.fn.countTo = function (options) {
 options = options || {};//当options未被初始化,即typeof options = 'undefined'时,执行后面部分即var options = {}来初始化一个对象

 return $(this).each(function () {
  // set options for current element
  var settings = $.extend({}, $.fn.countTo.defaults, {
  from:  $(this).data('from'),
  to:  $(this).data('to'),
  speed:  $(this).data('speed'),
  refreshInterval: $(this).data('refresh-interval'),
  decimals: $(this).data('decimals')
  }, options);

  // how many times to update the value, and how much to increment the value on each update
  //更新值多少次,每次更新值多快
  var loops = Math.ceil(settings.speed / settings.refreshInterval),
  increment = (settings.to - settings.from) / loops;

  // references & variables that will change with each update
  //引用和变量每次更新将改变
  var self = this,//返回html对象
  $self = $(this),//返回返回一个jquery对象
  loopCount = 0,
  value = settings.from,
  data = $self.data('countTo') || {};//获取jauery方法对象

  $self.data('countTo', data);//赋值

  // if an existing interval can be found, clear it first
  //如果存在间隔,则清除它
  if (data.interval) {
  clearInterval(data.interval);
  }
  data.interval = setInterval(updateTimer, settings.refreshInterval);

  // initialize the element with the starting value
  //用开始的值初始化
  render(value);

  function updateTimer() {
  value += increment;
  loopCount++;

  render(value);

  if (typeof(settings.onUpdate) == 'function') {
   settings.onUpdate.call(self, value);
  }

  if (loopCount >= loops) {
   // remove the interval
   $self.removeData('countTo');
   clearInterval(data.interval);
   value = settings.to;

   if (typeof(settings.onComplete) == 'function') {
   settings.onComplete.call(self, value);
   }
  }
  }

  function render(value) {
  var formattedValue = settings.formatter.call(self, value, settings);
  $self.html(formattedValue);
  }
 });
 };

 $.fn.countTo.defaults = {
 from: 200,  // the number the element should start at
 to: 0,   // the number the element should end at
 speed: 1000,  // how long it should take to count between the target numbers
 refreshInterval: 1, // how often the element should be updated
 decimals: 0,  // the number of decimal places to show
 formatter: formatter, // handler for formatting the value before rendering
 onUpdate: null, // callback method for every time the element is updated
 onComplete: null // callback method for when the element finishes updating
 };

 function formatter(value, settings) {
 return value.toFixed(settings.decimals);
 }

 // custom formatting example
 $('#count-number').data('countToOptions', {
 formatter: function (value, options) {
 return value.toFixed(options.decimals).replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
 }
 });

 // start all the timers
 $('.timer').each(count);
 function count(options) {
 var $this = $(this);
 options = $.extend({}, options || {}, $this.data('countToOptions') || {});
 $this.countTo(options);
 }

apply与call的简单用法,学习链接。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
QQ登录简单实现代码
Mar 09 Javascript
JavaScript 内置对象属性及方法集合
Jul 04 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
玩转方法:call和apply
May 08 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
Sep 09 Javascript
JS运动相关知识点小结(附弹性运动示例)
Jan 08 Javascript
javascript数据类型详解
Feb 07 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
jquery实现掷骰子小游戏
Oct 24 jQuery
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 #Javascript
原生js封装添加class,删除class的实例
Nov 06 #Javascript
Node.js实现发送邮件功能
Nov 06 #Javascript
快速搭建React的环境步骤详解
Nov 06 #Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 #Javascript
two.js之实现动画效果示例
Nov 06 #Javascript
JS实现图片放大镜插件详解
Nov 06 #Javascript
You might like
php disk_free_space 返回目录可用空间
2010/05/10 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
js函数调用的方式
2014/05/06 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
python实现RSA加密(解密)算法
2016/02/17 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python之指数与E记法的区别详解
2019/11/21 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
法律进企业活动方案
2014/03/04 职场文书
买卖协议书范本
2014/04/21 职场文书
公司周年庆活动方案
2014/08/25 职场文书
博士给导师的自荐信
2015/03/06 职场文书
信息技术国培研修日志
2015/11/13 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
MySQL root密码的重置方法
2021/04/21 MySQL