微信小程序实现倒计时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 相关文章推荐
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
js的一些常用方法小结
Jun 29 Javascript
javascript删除option选项的多种方法总结
Nov 22 Javascript
js封装可使用的构造函数继承用法分析
Jan 28 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
使用JS读取XML文件的方法
Nov 25 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
Aug 28 Javascript
100行代码实现一个vue分页组功能
Nov 06 Javascript
使用puppeteer爬取网站并抓出404无效链接
Dec 20 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 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数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
降低PHP Redis内存占用
2017/03/23 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
JS焦点图切换,上下翻转
2011/05/12 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
python实现KNN近邻算法
2020/12/30 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
党员个人对照检查材料思想汇报
2014/09/16 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书