Vue——手機號、驗證碼登錄(設置按鈕60s禁用倒計時)


  最近在做一個Vue項目,前端通過手機號、驗證碼登錄,獲取驗證碼按鈕需要設置60s倒計時(點擊一次后,一分鍾內不得再次點擊)。先看一下效果圖:

 

  輸入正確格式的手機號碼后,“獲取驗證碼”按鈕方可點擊;點擊“獲取驗證碼”后,按鈕進入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方法,可以參照(https://www.cnblogs.com/belongs-to-qinghua/p/11936476.html

  •  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)
    }
}

  

  通過上面的代碼,就可以實現了,如有錯誤,敬請指正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM