Vue实现手机号、验证码登录(60s禁用倒计时)


Posted in Vue.js onDecember 19, 2020

 最近在做一个Vue项目,前端通过手机号、验证码登录,获取验证码按钮需要设置60s倒计时(点击一次后,一分钟内不得再次点击)。先看一下效果图:

Vue实现手机号、验证码登录(60s禁用倒计时)

输入正确格式的手机号码后,“获取验证码”按钮方可点击;点击“获取验证码”后,按钮进入60s倒计时,效果图如下:

Vue实现手机号、验证码登录(60s禁用倒计时)

Vue实现手机号、验证码登录(60s禁用倒计时)

 效果图已经有了,接下来就上代码吧!

  • html
<el-button @click="getCode()" :class="{'disabled-style':getCodeBtnDisable}" :disabled="getCodeBtnDisable">{{codeBtnWord}}</el-button>
  • 数据data
data() {
     return {
        loginForm: {
            phoneNumber: '',
            verificationCode: '',
        },
        codeBtnWord: '获取验证码', // 获取验证码按钮文字
        waitTime:61, // 获取验证码按钮失效时间
    }
}
  • 计算属性computed
computed: {
    // 用于校验手机号码格式是否正确
    phoneNumberStyle(){
        let reg = /^1[3456789]\d{9}$/
        if(!reg.test(this.loginForm.phoneNumber)){
            return false
        }
        return true
    },
    // 控制获取验证码按钮是否可点击
    getCodeBtnDisable:{
        get(){
            if(this.waitTime == 61){
                if(this.loginForm.phoneNumber){
                    return false
                }
                return true
            }
            return true
        },
        // 注意:因为计算属性本身没有set方法,不支持在方法中进行修改,而下面我要进行这个操作,所以需要手动添加
        set(){} 
    }
}

关于上面给计算属性添加set方法,可以参照//3water.com/article/202496.htm

  •  css设置不可点击时置灰
.el-button.disabled-style {
    background-color: #EEEEEE;
    color: #CCCCCC;
}
  • mothods中添加获取验证码方法
getCode(){
    if(this.phoneNumberStyle){
        let params = {}
        params.phone = this.loginForm.phoneNumber
        // 调用获取短信验证码接口
        axios.post('/sendMessage',params).then(res=>{
            res = res.data
            if(res.status==200) {
                this.$message({
                    message: '验证码已发送,请稍候...',
                    type: 'success',
                    center:true
                })
            }
        })
        // 因为下面用到了定时器,需要保存this指向
        let that = this
        that.waitTime--
        that.getCodeBtnDisable = true
        this.codeBtnWord = `${this.waitTime}s 后重新获取`
        let timer = setInterval(function(){
            if(that.waitTime>1){
                that.waitTime--
                that.codeBtnWord = `${that.waitTime}s 后重新获取`
            }else{
                clearInterval(timer)
                that.codeBtnWord = '获取验证码'
                that.getCodeBtnDisable = false
                that.waitTime = 61
            }
        },1000)
    }
}

通过上面的代码,就可以实现了,如有错误,敬请指正!

以上就是Vue实现手机号、验证码登录(60s禁用倒计时)的详细内容,更多关于vue 手机号验证码登录的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
详解vue 组件注册
Nov 20 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
Vue如何清空对象
Mar 03 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
Vue——前端生成二维码的示例
Dec 19 #Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 #Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 #Vue.js
vue 通过base64实现图片下载功能
Dec 19 #Vue.js
Vue中computed和watch有哪些区别
Dec 19 #Vue.js
Vue与React的区别和优势对比
Dec 18 #Vue.js
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 #Vue.js
You might like
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python包的导入方式总结
2021/03/02 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
资深生产主管自我评价
2013/09/22 职场文书
高校毕业生自我鉴定
2013/10/27 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
安全生产先进个人总结
2015/02/15 职场文书
2015年信访工作总结
2015/04/07 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
网吧员工管理制度
2015/08/05 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
使用Python获取字典键对应值的方法
2022/04/26 Python