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实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vuex的使用步骤
Jan 06 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
详解Vue的options
May 15 Vue.js
详解Vue router路由
Nov 20 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue中div禁止点击事件的实现
Apr 02 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 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
smarty获得当前url的方法分享
2014/02/14 PHP
PHP闭包函数详解
2016/02/13 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
python基础教程之udp端口扫描
2014/02/10 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python图片验证码生成代码
2016/07/02 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
Python subprocess库的使用详解
2018/10/26 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
UDP协议功能
2013/01/06 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
电工工作职责范本
2014/02/22 职场文书
学习礼仪心得体会
2014/09/01 职场文书
公司离职证明标准范本
2014/10/05 职场文书
销售经理岗位职责
2015/01/31 职场文书
社区重阳节活动总结
2015/03/24 职场文书
百家讲坛观后感
2015/06/12 职场文书
opencv检测动态物体的实现
2021/07/21 Python
解决MySQL报“too many connections“错误
2022/04/19 MySQL
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js