微信小程序实现倒计时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 相关文章推荐
利用jQuery的deferred对象实现异步按顺序加载JS文件
Mar 17 Javascript
关于jQuery object and DOM element
Apr 15 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
May 12 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
May 15 Javascript
javascript实现简单的全选和反选功能
Jan 05 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
详解vuex的简单todolist例子
Jul 14 Javascript
vue点击页面空白处实现保存功能
Nov 06 Javascript
全面解析JavaScript Module模式
Jul 24 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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
Django中间件工作流程及写法实例代码
2018/02/06 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
大学生职业生涯规划方案
2014/01/03 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
服务承诺书怎么写
2014/05/24 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
实习证明格式范文
2014/10/14 职场文书
个人学习总结范文
2015/02/15 职场文书
企业年会祝酒词
2015/08/11 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
QT与javascript交互数据的实现
2021/05/26 Javascript
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
Java 数据结构七大排序使用分析
2022/04/02 Java/Android