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


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创建的一个图片、视频缓冲的效果样式插件
Aug 28 Javascript
js显示时间 js显示最后修改时间
Jan 02 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
May 18 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
Oct 28 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
Nov 10 Javascript
AngularJS中使用ngModal模态框实例
May 27 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
vue 本地环境跨域请求proxyTable的方法
Sep 19 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 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中autoload的用法总结
2013/11/08 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
js实现div色块碰撞
2020/01/16 Javascript
Python中unittest用法实例
2014/09/25 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
python文件写入write()的操作
2019/05/14 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
python实现滑雪者小游戏
2020/02/22 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
中西医专业毕业生职业规划书
2014/02/24 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
python数字图像处理:图像简单滤波
2022/06/28 Python