微信小程序数字滚动插件使用详解


Posted in Javascript onFebruary 02, 2018

用es6语法方式写了个微信小程序小插件?数字滚动;

效果图:

微信小程序数字滚动插件使用详解

wxml页面布局代码:

<!--pages/main/index.wxml--><view class="animate-number">
  <view class="num num1">{{num1}}{{num1Complete}}</view>
  <view class="num num2">{{num2}}{{num2Complete}}</view>
  <view class="num num3">{{num3}}{{num3Complete}}</view>
  <view class="btn-box">
  <button bindtap="animate" type="primary" class="button">click me</button>
  </view></view>

index.js调用NumberAnimate.js

// pages/main/index.jsimport NumberAnimate from "../../utils/NumberAnimate";Page({
 data:{ 
 },
 onLoad:function(options){
  // 页面初始化 options为页面跳转所带来的参数 
 },
 onReady:function(){ 
 },
 onShow:function(){
 
  // 页面显示
 },
 onHide:function(){
  // 页面隐藏
 }, 
 onUnload:function(){
  // 页面关闭 
 },
 //调用NumberAnimate.js中NumberAnimate实例化对象,测试3种效果
 animate:function(){
 
  this.setData({
   num1:'',
   num2:'',
   num3:'',
   num1Complete:'',
   num2Complete:'',
   num3Complete:''
  });
 
  let num1 = 18362.856;
  let n1 = new NumberAnimate({
    from:num1,//开始时的数字
    speed:2000,// 总时间
    refreshTime:100,// 刷新一次的时间
    decimals:3,//小数点后的位数
    onUpdate:()=>{//更新回调函数
     this.setData({
      num1:n1.tempValue     });
    },
    onComplete:()=>{//完成回调函数
      this.setData({
       num1Complete:" 完成了"
      });
    }
  });
 
  let num2 = 13388;
  let n2 = new NumberAnimate({
    from:num2,
    speed:1500,
    decimals:0,
    refreshTime:100,
    onUpdate:()=>{
     this.setData({
      num2:n2.tempValue     });
    },
    onComplete:()=>{
      this.setData({
       num2Complete:" 完成了"
      });
    }
  });
 
  let num3 = 2123655255888.86;
  let n3 = new NumberAnimate({
    from:num3,
    speed:2000,
    refreshTime:100,
    decimals:2,
    onUpdate:()=>{
     this.setData({
      num3:n3.tempValue     });
    },
    onComplete:()=>{
      this.setData({
       num3Complete:" 完成了"
      });
    }
  });
 }})

NumberAnimate.js代码: 

/**
 * Created by wangyy on 2016/12/26.
 */'use strict';class NumberAnimate {
 
  constructor(opt) {
    let def = {
      from:50,//开始时的数字
      speed:2000,// 总时间
      refreshTime:100,// 刷新一次的时间
      decimals:2,// 小数点后的位数
      onUpdate:function(){}, // 更新时回调函数
      onComplete:function(){} // 完成时回调函数
    }
    this.tempValue = 0;//累加变量值
    this.opt = Object.assign(def,opt);//assign传入配置参数
    this.loopCount = 0;//循环次数计数
    this.loops = Math.ceil(this.opt.speed/this.opt.refreshTime);//数字累加次数
    this.increment = (this.opt.from/this.loops);//每次累加的值
    this.interval = null;//计时器对象
    this.init();
  }
  init(){
    this.interval = setInterval(()=>{this.updateTimer()},this.opt.refreshTime);
  }
 
  updateTimer(){
 
    this.loopCount++;
    this.tempValue = this.formatFloat(this.tempValue,this.increment).toFixed(this.opt.decimals);
    if(this.loopCount >= this.loops){
      clearInterval(this.interval);
      this.tempValue = this.opt.from;
      this.opt.onComplete();
    }
    this.opt.onUpdate();
  }
  //解决0.1+0.2不等于0.3的小数累加精度问题
  formatFloat(num1, num2) {
    let baseNum, baseNum1, baseNum2;
    try {
      baseNum1 = num1.toString().split(".")[1].length;
    } catch (e) {
      baseNum1 = 0;
    }
    try {
      baseNum2 = num2.toString().split(".")[1].length;
    } catch (e) {
      baseNum2 = 0;
    }
    baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
    return (num1 * baseNum + num2 * baseNum) / baseNum;
  };}export default NumberAnimate;

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

Javascript 相关文章推荐
基于jquery 的一个progressbar widge
Oct 29 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
浅谈javascript错误处理
Aug 11 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
js实现登录拖拽窗口
Feb 10 Javascript
JS中的BOM应用
Feb 02 #Javascript
微信小程序实现文字跑马灯效果
May 26 #Javascript
微信小程序实现滚动消息通知
Feb 02 #Javascript
微信小程序实现YDUI的ScrollTab组件
Feb 02 #Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 #Javascript
vuex的简单使用教程
Feb 02 #Javascript
详解VueJS应用中管理用户权限
Feb 02 #Javascript
You might like
四个PHP非常实用的功能
2015/09/29 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
php 浮点数比较方法详解
2017/05/05 PHP
php实现等比例压缩图片
2018/07/26 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python cs架构实现简单文件传输
2020/03/20 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
Python的几种主动结束程序方式
2019/11/22 Python
django model通过字典更新数据实例
2020/04/01 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
思想政治教育专业个人求职信范文
2013/12/20 职场文书
车辆转让协议书
2014/09/24 职场文书
支教个人总结
2015/03/04 职场文书
小学中队活动总结
2015/05/11 职场文书
看上去很美观后感
2015/06/10 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js