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


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 相关文章推荐
自适应高度框架 ----属个人收藏内容
Jan 22 Javascript
Javascript 跨域访问解决方案
Feb 14 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
自己使用jquery写的一个无缝滚动的插件
Apr 30 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
Javascript实现字数统计
Jul 03 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
ES6新增的math,Number方法
Aug 06 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
Python实现的双色球生成功能示例
2017/12/18 Python
python提取log文件内容并画出图表
2019/07/08 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
初三开学计划书
2014/04/27 职场文书
平安校园建设方案
2014/05/02 职场文书
代收款委托书范本
2014/10/01 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
2015年科协工作总结
2015/05/19 职场文书
河童之夏观后感
2015/06/11 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
Python字符串常规操作小结
2022/04/03 Python
spring boot实现文件上传
2022/08/14 Java/Android