Vue實(shí)現(xiàn)手機(jī)號(hào)、驗(yàn)證碼登錄(60s禁用倒計(jì)時(shí))
最近在做一個(gè)Vue項(xiàng)目,前端通過(guò)手機(jī)號(hào)、驗(yàn)證碼登錄,獲取驗(yàn)證碼按鈕需要設(shè)置60s倒計(jì)時(shí)(點(diǎn)擊一次后,一分鐘內(nèi)不得再次點(diǎn)擊)。先看一下效果圖:

輸入正確格式的手機(jī)號(hào)碼后,“獲取驗(yàn)證碼”按鈕方可點(diǎn)擊;點(diǎn)擊“獲取驗(yàn)證碼”后,按鈕進(jìn)入60s倒計(jì)時(shí),效果圖如下:


效果圖已經(jīng)有了,接下來(lái)就上代碼吧!
- html
<el-button @click="getCode()" :class="{'disabled-style':getCodeBtnDisable}" :disabled="getCodeBtnDisable">{{codeBtnWord}}</el-button>
- 數(shù)據(jù)data
data() {
return {
loginForm: {
phoneNumber: '',
verificationCode: '',
},
codeBtnWord: '獲取驗(yàn)證碼', // 獲取驗(yàn)證碼按鈕文字
waitTime:61, // 獲取驗(yàn)證碼按鈕失效時(shí)間
}
}
- 計(jì)算屬性computed
computed: {
// 用于校驗(yàn)手機(jī)號(hào)碼格式是否正確
phoneNumberStyle(){
let reg = /^1[3456789]\d{9}$/
if(!reg.test(this.loginForm.phoneNumber)){
return false
}
return true
},
// 控制獲取驗(yàn)證碼按鈕是否可點(diǎn)擊
getCodeBtnDisable:{
get(){
if(this.waitTime == 61){
if(this.loginForm.phoneNumber){
return false
}
return true
}
return true
},
// 注意:因?yàn)橛?jì)算屬性本身沒(méi)有set方法,不支持在方法中進(jìn)行修改,而下面我要進(jìn)行這個(gè)操作,所以需要手動(dòng)添加
set(){}
}
}
關(guān)于上面給計(jì)算屬性添加set方法,可以參照//www.dhdzp.com/article/202496.htm
- css設(shè)置不可點(diǎn)擊時(shí)置灰
.el-button.disabled-style {
background-color: #EEEEEE;
color: #CCCCCC;
}
- mothods中添加獲取驗(yàn)證碼方法
getCode(){
if(this.phoneNumberStyle){
let params = {}
params.phone = this.loginForm.phoneNumber
// 調(diào)用獲取短信驗(yàn)證碼接口
axios.post('/sendMessage',params).then(res=>{
res = res.data
if(res.status==200) {
this.$message({
message: '驗(yàn)證碼已發(fā)送,請(qǐng)稍候...',
type: 'success',
center:true
})
}
})
// 因?yàn)橄旅嬗玫搅硕〞r(shí)器,需要保存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 = '獲取驗(yàn)證碼'
that.getCodeBtnDisable = false
that.waitTime = 61
}
},1000)
}
}
通過(guò)上面的代碼,就可以實(shí)現(xiàn)了,如有錯(cuò)誤,敬請(qǐng)指正!
以上就是Vue實(shí)現(xiàn)手機(jī)號(hào)、驗(yàn)證碼登錄(60s禁用倒計(jì)時(shí))的詳細(xì)內(nèi)容,更多關(guān)于vue 手機(jī)號(hào)驗(yàn)證碼登錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Vue中l(wèi)ocalstorage和sessionstorage的使用
這篇文章主要介紹了詳解Vue中l(wèi)ocalstorage和sessionstorage的使用方法和經(jīng)驗(yàn)心得,有需要的朋友跟著小編參考學(xué)習(xí)下吧。2017-12-12
vue 使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果
要在css中設(shè)置table的高度,使數(shù)據(jù)過(guò)多時(shí)出現(xiàn)滾動(dòng)條,將縱向設(shè)置為overflow-y: auto;橫向設(shè)置隱藏 overflow-x: hidden,接下來(lái)通過(guò)本文介紹vue使用iView組件中的Table實(shí)現(xiàn)定時(shí)自動(dòng)滾動(dòng)效果,需要的朋友可以參考下2024-05-05
使用vue進(jìn)行Lodop打印的一些常用方法小結(jié)
這篇文章主要給大家介紹了關(guān)于使用vue進(jìn)行Lodop打印的一些常用方法,需要進(jìn)行打印功能,Lodop就是實(shí)現(xiàn)需求的插件,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
vue3+vite+ts?通過(guò)svg-sprite-loader?插件使用自定義圖標(biāo)的詳細(xì)步驟
這篇文章主要介紹了vue3+vite+ts通過(guò)svg-sprite-loader插件使用自定義圖標(biāo),本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Vue v2.4中新增的$attrs及$listeners屬性使用教程
這篇文章主要給大家介紹了關(guān)于Vue v2.4中新增的$attrs及$listeners屬性的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
vue-treeselect顯示unknown的問(wèn)題及解決
這篇文章主要介紹了vue-treeselect顯示unknown的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Vue2.0點(diǎn)擊切換類(lèi)名改變樣式的方法
今天小編就為大家分享一篇Vue2.0點(diǎn)擊切換類(lèi)名改變樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

