vue短信驗(yàn)證性能優(yōu)化如何寫(xiě)入localstorage中
平時(shí)我們?cè)陧?xiàng)目中進(jìn)行注冊(cè)等的時(shí)候,會(huì)經(jīng)常用到短信驗(yàn)證的功能,但是現(xiàn)在現(xiàn)在很多短信驗(yàn)證都是存在下面幾個(gè)問(wèn)題,例如短信驗(yàn)證時(shí)間為60s的時(shí)候,
1. 當(dāng)點(diǎn)擊完按鈕時(shí),倒計(jì)時(shí)還沒(méi)到60s過(guò)完時(shí),刷新瀏覽器,驗(yàn)證碼按鈕又可以重新點(diǎn)擊
2.當(dāng)點(diǎn)擊按鈕倒計(jì)時(shí)開(kāi)始,例如在50s的時(shí)候我關(guān)閉了瀏覽器,過(guò)了5s后,我在打開(kāi),此時(shí)時(shí)間倒計(jì)時(shí)的時(shí)間應(yīng)該是45s左右,但是當(dāng)重新打開(kāi)瀏覽器的時(shí)候,按鈕又可以重新點(diǎn)擊了
為了解決上面的兩個(gè)問(wèn)題,就需要把時(shí)間都寫(xiě)到localstorage里面去,當(dāng)打開(kāi)頁(yè)面的時(shí)候,就去localstorage里面去取,我這里就貼上我的解決方法,因?yàn)榍皫滋煊袀€(gè)vue的項(xiàng)目用到該方法,所以我這里就寫(xiě)個(gè)vue的方法出來(lái)吧
組件里面的html代碼:
<div class="mtui-cell__ft" @click="getCode">
<button class="mtui-vcode-btn mtui-text-center" v-if="flag">獲取短信</button>
<button class="mtui-vcode-btn mtui-text-center" v-if="!flag">剩余{{second}}s</button>
</div>
重點(diǎn)來(lái)啦
在data里面定義幾個(gè)需要用到的變量:
second: 60, flag: true, timer: null // 該變量是用來(lái)記錄定時(shí)器的,防止點(diǎn)擊的時(shí)候觸發(fā)多個(gè)setInterval
獲取短信驗(yàn)證的方法:
getCode() {
let that = this;
if (that.flag) {
that.flag = false;
let interval = window.setInterval(function() {
that.setStorage(that.second);
if (that.second-- <= 0) {
that.second = 60;
that.flag = true;
window.clearInterval(interval);
}
}, 1000);
}
}
寫(xiě)入和讀取localstorage:
setStorage(parm) {
localStorage.setItem("dalay", parm);
localStorage.setItem("_time", new Date().getTime());
},
getStorage() {
let localDelay = {};
localDelay.delay = localStorage.getItem("dalay");
localDelay.sec = localStorage.getItem("_time");
return localDelay;
}
防止頁(yè)面刷新是驗(yàn)證碼失效:
judgeCode() {
let that = this;
let localDelay = that.getStorage();
let secTime = parseInt(
(new Date().getTime() - localDelay.sec) / 1000
);
console.log(localDelay);
if (secTime > localDelay.delay) {
that.flag = true;
console.log("已過(guò)期");
} else {
that.flag = false;
let _delay = localDelay.delay - secTime;
that.second = _delay;
that.timer = setInterval(function() {
if (_delay > 1) {
_delay--;
that.setStorage(_delay);
that.second = _delay;
that.flag = false;
} else {
// 此處賦值時(shí)為了讓瀏覽器打開(kāi)的時(shí)候,直接就顯示剩余的時(shí)間
that.flag = true;
window.clearInterval(that.timer);
}
}, 1000);
}
}
然后在html掛載頁(yè)面完成后的生命鉤子(mounted)中調(diào)用judgeCode()方法就能實(shí)現(xiàn)該功能了
總結(jié)
以上所述是小編給大家介紹的vue短信驗(yàn)證性能優(yōu)化如何寫(xiě)入localstorage中,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Vue 項(xiàng)目中遇到的跨域問(wèn)題及解決方法(后臺(tái)php)
這篇文章主要介紹了Vue 項(xiàng)目中遇到的跨域問(wèn)題及解決方法(后臺(tái)php),前端采用vue框架,后臺(tái)php,具體解決方法,大家參考下本文2018-03-03
vue中遇到的坑之變化檢測(cè)問(wèn)題(數(shù)組相關(guān))
這篇文章主要介紹了vue中遇到的坑之變化檢測(cè)問(wèn)題(數(shù)組相關(guān)) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
vuex實(shí)現(xiàn)購(gòu)物車(chē)功能
這篇文章主要為大家詳細(xì)介紹了vuex實(shí)現(xiàn)購(gòu)物車(chē)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
你知道Vue中神奇的$set是如何實(shí)現(xiàn)的嗎?
在日常開(kāi)發(fā)中,$set的也是一個(gè)非常實(shí)用的API。但是我們知其然更要知其所以然,接下來(lái)就跟隨小編一起看一下Vue中的$set是如何實(shí)現(xiàn)的吧2022-12-12
vue通過(guò)笛卡兒積實(shí)現(xiàn)sku庫(kù)存配置方式
這篇文章主要介紹了vue通過(guò)笛卡兒積實(shí)現(xiàn)sku庫(kù)存配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Nuxt引入vue-persistedstate以及踩坑記錄
這篇文章主要介紹了Nuxt引入vue-persistedstate以及踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

