使用Vue純前端實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼并實(shí)現(xiàn)倒計(jì)時(shí)
你好,我是小白Coding日志,一個(gè)熱愛技術(shù)的程序員。在這里,我分享自己在編程和技術(shù)世界中的學(xué)習(xí)心得和體會(huì)。希望我的文章能夠給你帶來一些靈感和幫助。歡迎來到我的博客,一起在技術(shù)的世界里探索前行吧!
在實(shí)際的應(yīng)用開發(fā)中,涉及用戶登錄驗(yàn)證、密碼重置等場(chǎng)景時(shí),通常需要前端實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的功能,以提升用戶體驗(yàn)和安全性。這個(gè)過程涉及與后端的協(xié)同配合,通過調(diào)用短信網(wǎng)關(guān)或短信服務(wù)接口,將驗(yàn)證碼發(fā)送至用戶手機(jī)。以下是一個(gè)簡(jiǎn)單的前端實(shí)現(xiàn),演示了如何在用戶點(diǎn)擊發(fā)送驗(yàn)證碼按鈕時(shí)觸發(fā)短信驗(yàn)證碼的發(fā)送,并開始一個(gè)倒計(jì)時(shí)。
功能分析
遇事先認(rèn)真分析是我今年在工作上的要求之一
將目標(biāo)分解為小模塊后再逐步完成。首先,我們需要一個(gè)手機(jī)號(hào)碼輸入框,并對(duì)輸入的手機(jī)號(hào)碼進(jìn)行合法性校驗(yàn)。其次,需要一個(gè)驗(yàn)證碼輸入框,以及一個(gè)獲取短信驗(yàn)證碼的按鈕。點(diǎn)擊該按鈕將向服務(wù)端發(fā)送獲取請(qǐng)求,參數(shù)為輸入的手機(jī)號(hào)碼,并開始顯示倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后重新顯示獲取驗(yàn)證碼按鈕。服務(wù)端收到請(qǐng)求后會(huì)給該手機(jī)號(hào)碼發(fā)送短信驗(yàn)證碼,然后我們輸入收到的驗(yàn)證碼即可進(jìn)行下一步操作。
項(xiàng)目使用vue3+vite+ElementPlus,這里假設(shè)你已經(jīng)搭建好項(xiàng)目了!
頁面實(shí)現(xiàn)
<el-form :model="form" label-width="120px"> <el-form-item label="手機(jī)號(hào)碼:"> <el-input v-model="form.name" /> </el-form-item> <el-form-item label="驗(yàn)證碼:"> <el-input v-model="form.code" > <template #suffix> <div v-if="messageCodeVis" class="second-text">{{countdown}}秒后重新獲取</div> <el-button v-else type="primary" link @click="sendCode">獲取驗(yàn)證碼</el-button> </template> </el-input> </el-form-item> </el-form> <el-button type="primary">確定</el-button>
實(shí)現(xiàn)倒計(jì)時(shí)
點(diǎn)擊獲取驗(yàn)證碼按鈕將觸發(fā) **sendCode**
函數(shù),開始倒計(jì)時(shí),并隱藏獲取按鈕,顯示倒計(jì)時(shí)的秒數(shù),倒計(jì)時(shí)結(jié)束后會(huì)重新顯示獲取按鈕。你可以通過修改 **countdown**
變量的值來指定倒計(jì)時(shí)的總秒數(shù)。 **startCountdown**
函數(shù)是整個(gè)功能的核心是直接可以拿來用的。最后在點(diǎn)擊發(fā)送按鈕的時(shí)候?qū)κ謾C(jī)號(hào)碼輸入框中的號(hào)碼做一個(gè)校驗(yàn)。
const sendCode = () =>{ const reg = /^1[3456789]\d{9}$/; if (!reg.test(form.value.phone)) return if(!form.value.phone) return ElMessage.error('請(qǐng)輸入手機(jī)號(hào)碼') countdown.value = 60 messageCodeVis.value = true startCountdown() } /* 倒計(jì)時(shí)函數(shù) */ const startCountdown = () => { const intervalId = setInterval(() => { if (countdown.value > 0) { countdown.value--; } else { clearInterval(intervalId) messageCodeVis.value = false } }, 1000) }
全部代碼
<script setup> import { ref } from 'vue' import { ElMessage } from 'element-plus'; const form = ref({ phone: '', code: '' }) const messageCodeVis = ref(false) let countdown = ref(0) const sendCode = () =>{ const reg = /^1[3456789]\d{9}$/; if(!form.value.phone) return ElMessage.error('請(qǐng)輸入手機(jī)號(hào)碼') if (!reg.test(form.value.phone)) return countdown.value = 60 messageCodeVis.value = true startCountdown() } /* 倒計(jì)時(shí) */ const startCountdown = () => { const intervalId = setInterval(() => { if (countdown.value > 0) { countdown.value--; } else { clearInterval(intervalId) messageCodeVis.value = false } }, 1000) } const rulesForm = { phone: [ { required: true, message: '請(qǐng)輸入手機(jī)號(hào)碼', trigger: 'blur' }, { pattern: /^1[3456789]\d{9}$/, message: '請(qǐng)輸入有效的手機(jī)號(hào)碼', trigger: 'blur' } ] } </script> <template> <el-form :model="form" :rules="rulesForm" label-width="120px"> <el-form-item label="手機(jī)號(hào)碼:" prop="phone"> <el-input v-model="form.phone" /> </el-form-item> <el-form-item label="驗(yàn)證碼:"> <el-input v-model="form.code" > <template #suffix> <div v-if="messageCodeVis" class="second-text">{{countdown}}秒后重新獲取</div> <el-button v-else type="primary" link @click="sendCode">獲取驗(yàn)證碼</el-button> </template> </el-input> </el-form-item> </el-form> <el-button type="primary">確定</el-button> </template> <style scoped> .read-the-docs { color: #888; } .second-text { color: #e60707; } </style>
到此這篇關(guān)于使用Vue純前端實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼并實(shí)現(xiàn)倒計(jì)時(shí)的文章就介紹到這了,更多相關(guān)使用Vue純前端實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼并實(shí)現(xiàn)倒計(jì)時(shí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VUE Error: getaddrinfo ENOTFOUND localhost
這篇文章主要介紹了VUE Error: getaddrinfo ENOTFOUND localhost,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05一次VUE項(xiàng)目中遇到XSS攻擊的實(shí)戰(zhàn)記錄
XSS?攻擊是頁面被注入了惡意的代碼,下面這篇文章主要給大家介紹了一次VUE項(xiàng)目中遇到XSS攻擊的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12vue.js利用Object.defineProperty實(shí)現(xiàn)雙向綁定
這篇文章主要為大家詳細(xì)介紹了vue.js利用Object.defineProperty實(shí)現(xiàn)雙向綁定,幫大家解析神秘的Object.defineProperty方法2017-03-03vue3的setup語法糖簡(jiǎn)單封裝ckediter的過程
Vue3官方提供了 script setup 語法糖,只需在script標(biāo)簽中添加setup,組件只需引入不用注冊(cè),屬性和方法也不用返回,今天通過本文給大家分享vue3的setup語法糖簡(jiǎn)單封裝ckediter的過程,感興趣的朋友一起看看吧2023-10-10vue項(xiàng)目中接入websocket時(shí)需要ip端口動(dòng)態(tài)部署問題
這篇文章主要介紹了vue項(xiàng)目中接入websocket時(shí)需要ip端口動(dòng)態(tài)部署問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Vue異步請(qǐng)求導(dǎo)致頁面數(shù)據(jù)渲染錯(cuò)誤問題解決方法示例
這篇文章主要為大家介紹了Vue中異步請(qǐng)求導(dǎo)致頁面數(shù)據(jù)渲染錯(cuò)誤問題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09vue2實(shí)現(xiàn)移動(dòng)端上傳、預(yù)覽、壓縮圖片解決拍照旋轉(zhuǎn)問題
這篇文章主要介紹了vue2實(shí)現(xiàn)移動(dòng)端上傳、預(yù)覽、壓縮圖片解決拍照旋轉(zhuǎn)問題,需要的朋友可以參考下2017-04-04