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


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 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
javaScript实现游戏倒计时功能
Nov 17 Javascript
Vue项目实现换肤功能的一种方案分析
Aug 28 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 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
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
react redux入门示例
2018/04/19 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
python学习数据结构实例代码
2015/05/11 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
盛大二次面试题
2016/11/18 面试题
护理学毕业生自荐信
2013/10/02 职场文书
护士在校生自荐信
2014/02/01 职场文书
有关环保的标语
2014/06/13 职场文书
洗手间标语
2014/06/23 职场文书
2014最新实习证明模板
2014/10/02 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
个人年底工作总结
2015/03/10 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js