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


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 打印内容方法小结
Nov 04 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
js创建对象的方式总结
Jan 10 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
JS实现两表格里数据来回转移的方法
May 28 Javascript
JavaScript数据推送Comet技术详解
Apr 07 Javascript
js H5 canvas投篮小游戏
Aug 18 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
原来JS还可以这样拆箱转换详解
Feb 01 Javascript
JS原型与继承操作示例
May 09 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
typescript配置alias的详细步骤
Aug 12 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
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php实现分页显示
2015/11/03 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
php生成无限栏目树
2017/03/16 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python基础知识_浅谈用户交互
2017/05/31 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
python 如何在测试中使用 Mock
2021/03/01 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
商务邀请函范文
2014/01/14 职场文书
上班上网检讨书
2014/01/29 职场文书
西北政法大学自主招生自荐信
2014/01/29 职场文书
生日宴会主持词
2014/03/20 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
《假如》教学反思
2014/04/17 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技