微信小程序实现倒计时60s获取验证码


Posted in Javascript onApril 17, 2020

本文实例为大家分享了微信小程序倒计时获取验证码的具体代码,供大家参考,具体内容如下

1、工具类(引用微信小程序提供的工具类)

微信小程序实现倒计时60s获取验证码

countdown.js

class Countdown {
constructor(options = {}) {
Object.assign(this, {
options, 
})
this.__init()
}
/**
* 初始化
*/
__init() {
this.page = getCurrentPages()[getCurrentPages().length - 1]
this.setData = this.page.setData.bind(this.page)
this.restart(this.options)
}
/**
* 默认参数
*/
setDefaults() {
return {
date: `June 7, 2087 15:03:25`, 
refresh: 1000, 
offset: 0, 
onEnd() {}, 
render(date) {}, 
}
}
/**
* 合并参数
*/
mergeOptions(options) {
const defaultOptions = this.setDefaults()
for (let i in defaultOptions) {
if (defaultOptions.hasOwnProperty(i)) {
this.options[i] = typeof options[i] !== `undefined` ? options[i] : defaultOptions[i]
if (i === `date` && typeof this.options.date !== `object`) {
this.options.date = new Date(this.options.date)
}
if (typeof this.options[i] === `function`) {
this.options[i] = this.options[i].bind(this)
}
}
}
if (typeof this.options.date !== `object`) {
this.options.date = new Date(this.options.date)
}
}
/**
* 计算日期差
*/
getDiffDate() {
let diff = (this.options.date.getTime() - Date.now() + this.options.offset) / 1000
let dateData = {
years: 0,
days: 0,
hours: 0,
min: 0,
sec: 0,
millisec: 0,
}
if (diff <= 0) {
if (this.interval) {
this.stop()
this.options.onEnd()
}
return dateData
}
if (diff >= (365.25 * 86400)) {
dateData.years = Math.floor(diff / (365.25 * 86400))
diff -= dateData.years * 365.25 * 86400
}
if (diff >= 86400) {
dateData.days = Math.floor(diff / 86400)
diff -= dateData.days * 86400
}
if (diff >= 3600) {
dateData.hours = Math.floor(diff / 3600)
diff -= dateData.hours * 3600
}
if (diff >= 60) {
dateData.min = Math.floor(diff / 60)
diff -= dateData.min * 60
}
dateData.sec = Math.round(diff)
dateData.millisec = diff % 1 * 1000
return dateData
}
/**
* 补零
*/
leadingZeros(num, length = 2) {
num = String(num)
if (num.length > length) return num
return (Array(length + 1).join(`0`) + num).substr(-length)
}
/**
* 更新组件
*/
update(newDate) {
this.options.date = typeof newDate !== `object` ? new Date(newDate) : newDate
this.render()
return this
}
/**
* 停止倒计时
*/
stop() {
if (this.interval) {
clearInterval(this.interval)
this.interval = !1
}
return this
}
/**
* 渲染组件
*/
render() {
this.options.render(this.getDiffDate())
return this
}
/**
* 启动倒计时
*/
start() {
if (this.interval) return !1
this.render()
if (this.options.refresh) {
this.interval = setInterval(() => {
this.render()
}, this.options.refresh)
}
return this
}
/**
* 更新offset
*/
updateOffset(offset) {
this.options.offset = offset
return this
}
/**
* 重启倒计时
*/
restart(options = {}) {
this.mergeOptions(options)
this.interval = !1
this.start()
return this
}
}

export default Countdown

2、WXML部分:

<view class="weui-cell__ft">
 <view class="weui-vcode-btn" bindtap="vcode">{{ c2 || '获取验证码' }}</view>
</view>

3、JS部分:

import $wuxCountDown from 'countdown/countdown'
export {
 $wuxCountDown, 
}
import { $wuxCountDown } from '../../components/wux'
 vcode: function () {
 if (this.c2 && this.c2.interval) return !1
 this.c2 = new $wuxCountDown({
 date: +(new Date) + 60000,
 onEnd() {
 this.setData({
 c2: '重新获取验证码',
 })
 },
 render(date) {
 const sec = this.leadingZeros(date.sec, 2) + ' 秒后重发 '
 date.sec !== 0 && this.setData({
 c2: sec,
 })
 },
 })
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
微信小程序联网请求的轮播图
Jul 07 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
JS实现的文字间歇循环滚动效果完整示例
Feb 13 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
JS通过位运算实现权限加解密
Aug 14 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 #Javascript
前端跨域的几种解决方式总结(推荐)
Aug 16 #Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
Aug 16 #Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 #Javascript
微信小程序自定义组件
Aug 16 #Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 #Javascript
微信小程序多列选择器range-key使用详解
Mar 30 #Javascript
You might like
php银联网页支付实现方法
2015/03/04 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
js使用递归解析xml
2014/12/12 Javascript
完善的jquery处理机制
2016/02/21 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
Python set集合类型操作总结
2014/11/07 Python
python类继承用法实例分析
2015/05/27 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python中函数的返回值示例浅析
2019/08/28 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
django和flask哪个值得研究学习
2020/07/31 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
商务日语专业毕业生求职信
2013/10/26 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python