vue短信验证性能优化写入localstorage中

时间: 2018-04-25阅读: 1313标签: 验证

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

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

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

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

组件里面的html代码:

<div  @click="getCode">
         <button  v-if="flag">获取短信</button>
         <button  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()方法就能实现该功能了

原文链接:https://www.cnblogs.com/cythia/archive/2018/04/24/8934585.html  

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/706

关闭

javascript如何验证是否是图片?

在支持FileReader的浏览器中,可以使用indexOf方法检索文件类型是否为image/开头验证是否是图片。在不支持FileReader的浏览器中使用lastIndexOf与substring方法获取文件后缀判断是否图片

javascript如何判断字符串是否全为字母?

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

Js如何判断是否有小数点?

javascript判断是否有小数点的方法:1、可以使用正则表达式(/[\\\\.]/)判断是否有小数点。2、先将数字转换为数组,然后使用indexOf()方法判断数组中是否有小数点。

验证码的分类_ 网页验证码有哪些方式?

早期的互联网是没有验证码的,随着后来计算机程序的发展,黑客编写了模仿登录、恶意破解密码、刷票、论坛灌水等恶意程序,破坏了整个网络的平衡性。介绍目前常用验证码的分类有哪些:Gif动画验证码、手机短信验证码、手机语音验证码、视频验证码、滑动验证码

javascript如何验证不能为空?

整体为如果以一个或多个空格开始,替换全部空格为空,或者,如果以一个或多个空格结束,替换全部空格为空。

滑动验证码原理实现

滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低。常见验证码是需要输入图中字符的,是因为机器识别字符比较困难,以此来防止机器自动的行为。

javascript如何检查是否是浮点数?

JavaScript中可以使用正则表达式来判断是否浮点数。首先是判断是不是数字isNaN(),JavaScript中判断浮点数的正则表达式:在程序中的使用方法

javascript如何验证ip是否合法?

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

网页如何实现拼图滑块的验证码_纯js的实现

滑动解锁应该是有两张图片,一张正常的,一张上面有解锁区域的(后端给),然后前端只用把用户释放鼠标后,滑动模块在图片上的xy轴传给后端,后端做成功与否的判断。如果只是纯前端js验证,不具备高安全性。

基于react的滑动图片验证码组件

业务需求,需要在系统登陆的时候,使用“滑动图片验证码”,来验证操作的不是机器人。在一般的页面组件引用即可。onReload这个函数一般是用来请求后台图片的。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!