Vue中用JSON實(shí)現(xiàn)刷新界面不影響倒計(jì)時(shí)
本文實(shí)例為大家分享了Vue中用JSON實(shí)現(xiàn)刷新界面不影響倒計(jì)時(shí)的具體代碼,供大家參考,具體內(nèi)容如下
效果展示:
部分代碼
<el-form-item style="overflow:hidden" v-if="env === 'dev'"> <el-input style="width:180px; float:left" v-model="ruleForm.nucCode" size="small" placeholder="請輸入短信驗(yàn)證碼" /> <el-button class="message_btn" @click="getNumCode"> <span v-if="isShowNucTime" style="font-size:16px" >{{Nuc_time}} S</span> <span v-else-if="!isShowNucTime && NucAgain" >重新獲取驗(yàn)證碼</span> <span v-else style="color:#7fbfff" >獲取短信驗(yàn)證碼</span> </el-button> </el-form-item>
isShowNucTime:boolean = false; NucAgain: boolean = false; Nuc_code_freash: boolean = false; // 判斷驗(yàn)證碼是否過期 Nuc_time: number = 60; end_time: number = 0; private getCode() { let clicktime = new Date().getTime() + 60000; // 本地存儲(chǔ) localStorage.setItem('myEndTime', JSON.stringify(clicktime)); this.timeDown(clicktime); } // 驗(yàn)證碼倒計(jì)時(shí) timeDown(counttime: any) { // 判斷是否正在倒計(jì)時(shí) if (this.isShowNucTime) return; this.userChange = false; this.isShowNucTime = true; this.isGetNucCode = true; this.end_time = Number(localStorage.getItem('myEndTime')); this.Nuc_time = Math.ceil((this.end_time - new Date().getTime()) / 1000); let interval = setInterval(() => { this.Nuc_time--; if (this.Nuc_time < 1) { this.Nuc_time = 60; this.isShowNucTime = false; localStorage.removeItem('myEndTime'); if (!this.userChange) { this.NucAgain = true; } clearInterval(interval); } }, 1000) } private created(): void { let myEndTime= localStorage.getItem('myEndTime'); myEndTime && this.timeDown(myEndTime); }
重要的代碼部分
實(shí)現(xiàn)原理
1.首次加載頁面 點(diǎn)擊開始
1).獲取當(dāng)前時(shí)間戳與要倒計(jì)時(shí)的時(shí)間相加獲得要停止計(jì)時(shí)的時(shí)間
2).用localStorage保存當(dāng)前時(shí)間戳
3).通過js的setInterval定時(shí)器進(jìn)行倒計(jì)時(shí)
4).當(dāng)?shù)褂?jì)時(shí)結(jié)束后 清除localStorage中保存的結(jié)束時(shí)間
2.當(dāng)?shù)趎次進(jìn)入頁面或刷新頁面時(shí)
1).首先判斷l(xiāng)ocalStorage中倒計(jì)時(shí)是否結(jié)束
2).沒有結(jié)束則繼續(xù)倒計(jì)時(shí)
3).如果結(jié)束則顯示重新發(fā)送驗(yàn)證碼
- 主要運(yùn)用了localStorage + new Date().getTime()
- PS:本文只是展示部分代碼,一味的復(fù)制粘貼并不能運(yùn)行,還是搞清楚邏輯自己實(shí)現(xiàn)比較靠譜!
關(guān)于vue.js組件的教程,請大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。
更多vue學(xué)習(xí)教程請閱讀專題《vue實(shí)戰(zhàn)教程》
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例
下面小編就為大家分享一篇Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03詳解Vue項(xiàng)目引入CreateJS的方法(親測可用)
CreateJS是基于HTML5開發(fā)的一套模塊化的庫和工具。這篇文章主要介紹了Vue項(xiàng)目引入CreateJS的方法(親測),需要的朋友可以參考下2019-05-05vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能
這篇文章主要介紹了vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12vue-simple-verify實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼功能
登錄頁面經(jīng)常會(huì)需要滑動(dòng)驗(yàn)證碼的情況,使用vue插件vue-simple-verify就可以輕松實(shí)現(xiàn),下面小編給大家分享vue-simple-verify實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼功能,感興趣的朋友一起看看吧2024-06-06深入探討Vue3實(shí)現(xiàn)多數(shù)據(jù)變化監(jiān)聽的方式
隨著 Vue 3 的發(fā)布,框架帶來了更多的新特性和增強(qiáng),其中之一就是 watch 函數(shù)的升級(jí),這一改進(jìn)使得多個(gè)數(shù)據(jù)的變化偵聽更加優(yōu)雅和靈活,本文將深入探討 Vue 3 中的 watch 函數(shù),以及如何以更加優(yōu)雅的方式實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)變化的監(jiān)聽2023-08-08關(guān)于element中對(duì)el-input 自定義驗(yàn)證規(guī)則
這篇文章主要介紹了關(guān)于element中對(duì)el-input 自定義驗(yàn)證規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue3+Canvas實(shí)現(xiàn)簡易的貪吃蛇游戲
貪吃蛇作為一個(gè)經(jīng)典的小游戲,是很多人兒時(shí)的記憶,當(dāng)時(shí)的掌機(jī)、諾基亞手機(jī)里面都有它的身影。本文將用Vue3?Canvas來復(fù)刻一下這款游戲,感興趣的可以了解一下2022-07-07vue3中使用props和emits并指定其類型與默認(rèn)值
props是Vue3中的一個(gè)重要概念,它允許我們將數(shù)據(jù)從父組件傳遞到子組件,下面這篇文章主要給大家介紹了關(guān)于vue3中使用props和emits并指定其類型與默認(rèn)值的相關(guān)資料,需要的朋友可以參考下2023-04-04Vue中v-on的基礎(chǔ)用法、參數(shù)傳遞和修飾符的示例詳解
使用v-on:click給button綁定監(jiān)聽事件以及回調(diào)函數(shù),@是v-on:的縮寫,也就是簡寫也可以使用@click,這篇文章主要介紹了Vue中v-on的基礎(chǔ)用法、參數(shù)傳遞和修飾符,需要的朋友可以參考下2022-08-08