微信小程序实现倒计时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 相关文章推荐
JavaScript计算字符串中每个字符出现次数的小例子
Jul 02 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
javascript实现可键盘控制的抽奖系统
Mar 10 Javascript
JS实现简易刻度时钟示例代码
Mar 11 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
JS实现数组删除指定元素功能示例
Jun 05 Javascript
javascript sort()对数组中的元素进行排序详解
Oct 13 Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
Nov 04 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顺序查找和二分查找示例
2014/03/27 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
匿名信格式范文
2015/05/27 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
JavaScript实现简单的音乐播放器
2022/08/14 Javascript