微信小程序实现倒计时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下通过replace字符串替换实现大小图片切换
May 22 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
javascript for循环性能测试示例
Aug 07 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
Feb 05 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
javascript some()函数用法详解
2014/11/13 PHP
用PHP代码给图片加水印
2015/07/01 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
python实现用户登录系统
2016/05/21 Python
Android分包MultiDex策略详解
2017/10/30 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
电厂厂长岗位职责
2014/01/02 职场文书
法学个人求职信范文
2014/01/27 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
社团招新宣传语
2015/07/13 职场文书
大学生暑假实习总结
2015/07/13 职场文书
高三教师工作总结2015
2015/07/21 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技