现在有许多移动端登录是使用的是手机号码加验证码的方式登陆的,但是很多时候为了防止恶意获取短信验证码需要在前端做一些控制。

例如下列场景:

  1. 我们在前端写一个定时器函数,显然可以满足倒计时功能,但是页面被刷新的话,倒计时就会丢失,
  2. 那我们可以把倒计时的数组储存到cookie或者session中,可以满足页面刷新不丢失的效果,但是用户关闭掉页面,还是会存在倒计时丢失.
  3. 最后我们需要把倒计时时间记录在localStorage中,记录当前储存时间和和剩余倒计时秒数,然后在重新打开页面的时候根据当前时间减去存储时间,要是大于剩余倒计时时间那么我们倒计时继续

最后贴上具体代码:

//html
<div class="ver-code-btn btn bg-gray white" @click="getVerifyCode"><span v-if="countFlag">获取验证码</span><span v-else>剩余{{countNum}}S</span>
</div>
//jsdata () {return {countNum: 120, // 倒计时秒数countFlag: true}},created () {this.monitor() },methods: {monitor () {//监听关闭页面之后重新打开是否改继续倒计时let LocalDelay = this.getLocalDelay()let timeLine = parseInt((new Date().getTime() - LocalDelay.time) / 1000)if (timeLine > LocalDelay.delay) {console.warn('倒计时过期')} else {this.countFlag = falsethis.countNum = LocalDelay.delay - timeLinelet timer = setInterval(() => {if (this.countNum > 1) {this.countNum--this.setLocalDelay(this.countNum)  //设置每一次还需倒计时} else {clearInterval(timer)this.countFlag = true}}, 1000)}},countDown () {if (this.countFlag) {this.countFlag = falsethis.countNum = 120let timer = setInterval(() => {if (this.countNum > 1) {this.countNum--this.setLocalDelay(this.countNum)} else {clearInterval(timer)this.countFlag = true}}, 1000)} else {return false}},setLocalDelay (delay) {// location.href作为页面的唯一标识,可能一个项目中会有多个验证码。localStorage.setItem('delay_' + location.href, delay)localStorage.setItem('time_' + location.href, new Date().getTime())},getLocalDelay () {let LocalDelay = {delay: localStorage.getItem('delay_' + location.href),time : localStorage.getItem('time_' + location.href)}return LocalDelay},getVerifyCode () {if (this.countFlag) {api({phone}).then(res => {this.countDown() // 倒计时函数Toast({message: '发送成功!'})})}}
}

看看实际效果


怎么重新打开浏览器,刷新页面都不会丢失,完美[手动滑稽]
但是要是换其他浏览器那我也冒得法了…

vue获取手机验证码倒计时相关推荐

  1. vue获取手机验证码60秒倒计时,不能点击按钮

    vue获取手机验证码60秒倒计时,不能点击按钮 export const resend = element => {console.log(element)var num = 60var tim ...

  2. 获取手机验证码倒计时功能

    倒计时: 例如:登录页面获取手机验证码登录 代码: /* text:'获取验证码' => 按钮的初始展示样式是获取验证码 disabled:false, => 是否禁用按钮 防止用户在短时 ...

  3. Vue - 实现获取手机验证码倒计时 60 秒(手机号+验证码登录功能)

    前言 网上的大部分获取验证码逻辑的例子,代码多还不健壮,本文将用最少的代码实现相同的功能. 当点击获取验证码按钮时,会自动进入倒计时,同时按钮无法点击, 您可以自定义倒计时时间,如下图所示: 这块由于 ...

  4. 如何封装一个vue组件(获取手机验证码的组件)

    如何封装一个vue组件(获取手机验证码的组件) 定义一个名为 item-time 的新组件,这是获取手机验证码的组件 Vue.component('item-time', {props: ['maxt ...

  5. android获取手机验证码界面以及倒计时实现demo,移动端应用开发试题

    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', ...

  6. 2022.9.17 vue、element-ui实现登录获取手机验证码,进行手机号校验、验证码CD60秒

    一.实现效果: 1.直接点击,不为空校验 2.输入手机号格式不正确时 3.获取完验证码进行读秒 二.页面html <el-formclass="phone-form"ref= ...

  7. springboot+vue实现手机验证码功能

    springboot+vue实现手机验证码功能 榛子云短信平台用户中心注册登录(有免费的一条消息,剩下的需要买)(阿里云个人得备案) 在springboot中加入依赖,用到了redis,阿里的fast ...

  8. 【JavaScript】手机验证码倒计时

    手机验证码倒计时 样式 点击"发送手机验证码"开启倒计时: 开启倒计时后,再次点击不会发起再次请求: index.vue <p class="title" ...

  9. 获取手机验证码按钮的效果实现

    在web网页中,用户的一些行为,例如注册,登录,付款,修改密码等,都需要网站通过手机验证码来确认其行为身份,从而保证用户账户和网站自身的安全. 一.简介 网页中的验证码一般都是采用点击获取的方式,在实 ...

最新文章

  1. 黑龙江智能车邀请赛中的单车比赛
  2. C++知识点1——基础
  3. XScroll.js更新:加入交错切换效果,附思路
  4. asin c语言中 返回值范围_asin()_C语言asin()详解:反正弦函数,求反正弦值
  5. mysqlreport查看mysql性能
  6. python中__init__文件的运用_python中__init__.py文件的作用
  7. js 获取当前元素的父元素的父元素的id
  8. Ubuntu 18.04 - 启动时停留在 start bpfilter
  9. 8.21 :odd??:nth-of-type??
  10. ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
  11. CUBRID学习笔记 21 查看主键外键索引
  12. Nik Collection 3.0.8 Mac/Win PS/LR超强调色滤镜合集Nik3插件中文版+中文视频教程
  13. win10升级助手_不用QQ也能电脑远程,win10这功能太良心了!真后悔晚发现
  14. Introduction to Reinforcement Learning notes
  15. Android动态设置控件宽高和padding
  16. xp系统网上邻居看不到局域网电脑_Win7系统网上邻居看不到局域网中其他电脑怎么办...
  17. 浏览器显示DNS服务器可能不可用,浏览器打不开显示dns
  18. 在linux环境中安装jieba模块
  19. 微信小程序(3)—— 添加联系人至通讯录
  20. 联想LSE存高危漏洞 重装系统也无法消除

热门文章

  1. Selenium操作隐藏的元素
  2. ES6与CommonJS的模块化加载
  3. 一个简单的键盘监听木马dawenxi的制作
  4. ​Tim Draper:我已清空美股,大部分资产换成加密资产
  5. 【财富空间】五大趋势注解制造未来 | 2018德国汉诺威工博会回顾
  6. 近来对自己的十条告诫
  7. Flask开发删除功能,点击删除实现弹出确认框
  8. 各路BOSS精英怪刷点,欢迎各路大神来补充
  9. linux下下载优酷等的视频
  10. 关于bootstrap table 获取隐藏列