• 获取验证码倒计时优化 页面刷新实时倒计时


    原文地址:http://www.cnblogs.com/HDou/p/5553424.html

    实现刷新页面时,倒计时仍可正常显示,不清除记录。

    思路:将当前时间记录在本地sessionStrage中,刷新时,比较当前时间和记录的时间,进行相应操作

    jsp页面:

    <body>
    	<button id="getcode" value="获取验证码">获取验证码</button>
    </body>
     <script type="text/javascript">
    		 $(function() {
                 var btn = document.getElementById("getcode");
                 //调用监听
                 monitor($(btn));
                 //点击click
                 btn.onclick = function() {
                     //倒计时效果  getCode回调函数  获取验证码api
                     countDown($(this), getCode);
                 };
                 function getCode() {
                	 alert("验证码发送成功");
                 }
             });
    	</script>
    

      js页面:

    //防止页面刷新倒计时失效
     /**
      * 
      * @param {Object} obj  获取验证码按钮
      */
     function monitor(obj) {
         var LocalDelay = getLocalDelay();
         if(LocalDelay.time!=null){
             var timeLine = parseInt((new Date().getTime() - LocalDelay.time) / 1000);
             if (timeLine > LocalDelay.delay) {
                 console.log("过期");
             } else {
                 _delay = LocalDelay.delay - timeLine;
                 obj.text(_delay+"秒后重新发送");
                 document.getElementById("getcode").disabled = true;
                 var timer = setInterval(function() {
                     if (_delay > 1) {
                         _delay--;
                         obj.text(_delay+"秒后重新发送");
                         setLocalDelay(_delay);
                     } else {
                         clearInterval(timer);
                         obj.text("获取验证码");
                         document.getElementById("getcode").disabled = false;
                     }
                 }, 1000);
             }
         }
     };
    
    
     //倒计时效果
     /**
      * 
      * @param {Object} obj 获取验证码按钮
      * @param {Function} callback  获取验证码接口函数
      */
     function countDown(obj, callback) {
         if (obj.text() == "获取验证码") {
             var _delay = 60;
             var delay = _delay;
             obj.text(_delay+"秒后重新发送");
             document.getElementById("getcode").disabled = true;
             var timer = setInterval(function() {
                 if (delay > 1) {
                     delay--;
                     obj.html(delay+"秒后重新发送");
                     setLocalDelay(delay);
                 } else {
                     clearInterval(timer);
                     obj.text("获取验证码");
                     document.getElementById("getcode").disabled = false;
                 }
             }, 1000);
    
             callback();
         } else {
             return false;
         }
     }
    		//设置setLocalDelay
    		function setLocalDelay(delay) {
    			//location.href作为页面的唯一标识,可能一个项目中会有很多页面需要获取验证码。
    			sessionStorage.setItem("delay_" + location.href, delay);
    			sessionStorage.setItem("time_" + location.href, new Date().getTime());
    		}
    
    		//getLocalDelay()
    		function getLocalDelay() {
    			var LocalDelay = {};
    			LocalDelay.delay = sessionStorage.getItem("delay_" + location.href);
    			LocalDelay.time = sessionStorage.getItem("time_" + location.href);
    			return LocalDelay;
    		}

      

    note:

    1、localstorage存储对象分为两种:

    ① sessionStrage: session即会话的意思,在这里的session是指用户浏览某个网站时,从进入网站到关闭网站这个时间段,session对象的有效期就只有这么长。

    ② localStorage: 将数据保存在客户端硬件设备上,不管它是什么,意思就是下次打开计算机时候数据还在。

    两者区别就是一个作为临时保存,一个长期保存。

    2、(new Date().getTime()

    getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。

    关注微信公众号:CS尼克。我们一起学习计算机相关知识

  • 相关阅读:
    关于I2C的重要的结构体
    写一个简单的hello字符驱动模块
    Linux设备号
    创建一个简单的TCP服务器
    使用fork循环创建子进程
    vim自动添加头文件
    运行时多态的最终奥义:虚函数的妙用
    springboot的热部署之代码配置(一)
    对github上面的项目进行更新
    eclipse中安装git项目的运行
  • 原文地址:https://www.cnblogs.com/shueixue/p/5776965.html
Copyright © 2020-2023  润新知