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


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 相关文章推荐
JavaScript实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
Aug 23 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
JS实现处理时间,年月日,星期的公共方法示例
May 31 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
Sep 25 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 Javascript
通过实例解析JavaScript常用排序算法
Sep 02 Javascript
js实现手表表盘时钟与圆周运动
Sep 18 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 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给文字内容中的关键字进行套红处理
2016/04/12 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
layui表格数据重载
2019/07/27 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
python实现验证码识别功能
2018/06/07 Python
python贪吃蛇游戏代码
2020/04/18 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Pytorch转tflite方式
2020/05/25 Python
详解Python 最短匹配模式
2020/07/29 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
世博会口号
2014/06/20 职场文书
委托书怎样写
2014/08/30 职场文书
2014年实习生工作总结
2014/11/27 职场文书
消防安全主题班会
2015/08/12 职场文书
爱国主义主题班会
2015/08/14 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL