平时我们在项目中进行注册等的时候,会经常用到短信验证的功能,但是现在现在很多短信验证都是存在下面几个问题,例如短信验证时间为60s的时候,

1. 当点击完按钮时,倒计时还没到60s过完时,刷新浏览器,验证码按钮又可以重新点击

2.当点击按钮倒计时开始,例如在50s的时候我关闭了浏览器,过了5s后,我在打开,此时时间倒计时的时间应该是45s左右,但是当重新打开浏览器的时候,按钮又可以重新点击了

为了解决上面的两个问题,就需要把时间都写到localstorage里面去,当打开页面的时候,就去localstorage里面去取,我这里就贴上我的解决方法,因为前几天有个vue的项目用到该方法,所以我这里就写个vue的方法出来吧

组件里面的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>

  

重点来啦

在data里面定义几个需要用到的变量:

 second: 60,
flag: true,
timer: null // 该变量是用来记录定时器的,防止点击的时候触发多个setInterval

获取短信验证的方法:

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);
}
}

写入和读取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;
}

防止页面刷新是验证码失效:

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("已过期");
} 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 {
             
              // 此处赋值时为了让浏览器打开的时候,直接就显示剩余的时间
                      that.flag = true;
window.clearInterval(that.timer); }
}, 1000);
}
}

然后在html挂载页面完成后的生命钩子(mounted)中调用judgeCode()方法就能实现该功能了

vue短信验证性能优化写入localstorage中的更多相关文章

  1. vue 短信验证

    直接贴代码: HTML <div class="phone"> <div class="number"> <p class=&qu ...

  2. Luffy之注册认证(容联云通讯短信验证)

    用户的注册认证 前端显示注册页面并调整首页头部和登陆页面的注册按钮的链接. 注册页面Register,主要是通过登录页面进行改成而成. 先构造前端页面 <template> <div ...

  3. 注册登录页面修订-Python使用redis-手机验证接口-发送短信验证

    登录页面修订 views.Login.vue <template> <div class="login box"> <img src="@/ ...

  4. thinkphp实现短信验证注册

    前言 注册时经常需要用到短信验证码,本文记录一下思路和具体实现. 短信验证平台使用云片,短信验证码的生成使用thinkphp. 思路 1.用户输入手机号,请求获取短信验证码. 2.thinkphp生成 ...

  5. 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证

    这次公开课请来的嘉宾对自己的简介是: 连续创业失败的创业导师:伪天使投资人:某非知名私立大学创办人兼校长:业余时间在本校通信安全实验室打杂. 自从他在黑客大会上演讲<伪基站高级利用技术——彻底攻 ...

  6. PHP阿里大鱼短信验证

    PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号,在用户管理中心创建应用,确定AppKEY和App Secret还有配置签名 第二步 在应用管理中选择SDK下载,或者直接点击http://down ...

  7. 基于ThinkPHP与阿里大于的PHP短信验证功能

    https://blog.csdn.net/s371795639/article/details/53381274 PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号,在用户管理中心创建应用,确定A ...

  8. Mob.com 短信验证的简单使用

    1.环境配置 http://wiki.sharesdk.cn/android-短信sdk集成文档/ a.sdk下载 http://www.mob.com/#/downloadDetail/SMS/an ...

  9. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

随机推荐

  1. 深入理解JAVA集合系列四:ArrayList源码解读

    在开始本章内容之前,这里先简单介绍下List的相关内容. List的简单介绍 有序的collection,用户可以对列表中每个元素的插入位置进行精确的控制.用户可以根据元素的整数索引(在列表中的位置) ...

  2. 记:ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案

    HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to st ...

  3. 个人作业-Week 2

    一.代码复审 概要部分 代码能符合需求和规格说明么? 能: 代码设计是否有周全的考虑? 有较为周全的考虑: 代码可读性如何? 可读性一般: 代码容易维护么? 不太容易维护: 代码的每一行都执行并检查过 ...

  4. Prism框架的优点

    以我粗略的了解,prism/mvvm可以做到完全的逻辑和ui分离.即便是事件都是如此.这是主要优点.mvc是从本质上ui框架(当前大量半吊子把业务逻辑写在里面是不对的),mvvm包含客户端的业务逻辑. ...

  5. Android Service执行unbind后再次执行bind的问题

    在执行了startService.bindService.unbindService之后,再次执行bindService.这时发现Service的onBind方法并没有执行,而是执行的onRebind ...

  6. pixi.js 总结

    我的博客简单简洁 可能表达不清. 如有想法, 敬请留言.谢谢! 群:881784250 https://github.com/ccaleb/endless-runner/tree/master/jav ...

  7. .net mvc nopi生成word

    参考下面地址,实例已很不错了 https://www.cnblogs.com/ZaraNet/p/9691908.html

  8. Python内部类,内部类调用外部类属性,方法

    一 Python中内部类 典型定义: class MyOuter: age=18 def __init__(self,name): self.name=name class MyInner: def ...

  9. UIScrollView浏览一组图片,且图片与图片之间有间隔

    ---恢复内容开始--- UIScrollView是可以浏览一组view的,只要将其属性 pagingEnabled设置为true就可以了.具体过程是这样的, 1:将一组图片按照从左到右的顺序添加到U ...

  10. 域hash值破解的总结经验

    1.vsssown.vbs拷贝域数据库: 1.1上传vssown.vbs文件 上传cscript.exe和vssown.vbs到域服务器上 1.2创建快照 reg query HKEY_LOCAL_M ...