微信小程序实现倒计时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开发人员的10个关键习惯小结
Dec 05 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
详解Javascript中prototype属性(推荐)
Sep 03 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
详解支持Angular 2的表格控件
Jan 19 Javascript
利用node.js制作命令行工具方法教程(一)
Jun 22 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 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中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
动手学习无线电
2021/03/10 无线电
JavaScript中的私有成员
2006/09/18 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
javascript实现评分功能
2020/06/24 Javascript
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
np.random.seed() 的使用详解
2020/01/14 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
安全责任书范本
2014/04/15 职场文书
村党支部公开承诺书
2014/05/29 职场文书
仲裁协议书
2014/09/26 职场文书
党员个人剖析材料
2014/09/30 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
大学生见习报告总结
2014/11/04 职场文书
我的1919观后感
2015/06/03 职场文书
地心历险记观后感
2015/06/15 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
2019各种承诺书范文
2019/06/24 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Python pandas求方差和标准差的方法实例
2021/08/04 Python
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS