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


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 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
javascript 写的一个简单的timer
Jul 30 Javascript
javascript中的关于类型转换的性能优化
Dec 14 Javascript
document.createElement()用法
Mar 13 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
js实现异步循环实现代码
Feb 16 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
uni-app实现点赞评论功能
Nov 25 Javascript
js实现微信聊天效果
Aug 09 Javascript
js实现车辆管理系统
Aug 26 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
PHP xpath()函数讲解
2019/02/11 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jquery获取节点名称
2015/04/26 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
vue移动端路由切换实例分析
2018/05/14 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
校长先进事迹材料
2014/02/01 职场文书
文科生自我鉴定
2014/02/15 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
国庆节标语大全
2014/10/08 职场文书
老人节主持词
2015/07/04 职场文书
初中化学教学反思
2016/02/22 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL