JS倒計時(刷新頁面不影響)的實現思路


最近在做一個項目,用到了點擊按鈕實現倒計時,這個用js來實現很簡單。但是遇到了一個問題

  頁面刷新后js重新加載導致 倒計時重新開始,或者直接初始化了

后來通過 cookie 保存來實現了js倒計時,關閉頁面和強制刷新都不會停止

主要思路

  通過獲取當前時間 與 倒計時停止時間 之間的時間間隔來確定倒計時的數值。

具體如下:

1.首次加載頁面 點擊開始  

   1) 獲取當前時間  與要倒計時的時間相加獲得要 停止計時的時間

   2) 用cookie保存這個停止計時的時候

   3) 通過js的setInterval  進行定時刷新時間

   4) 當倒計時結束后 清楚cookie中保存的結束時間

2.當第二次進入頁面或刷新頁面時

   1)首先判斷cookie中時候有結束時間

    2)有取出 和 當前時間求差 如果 差值大於倒計時間隔時間 說明倒計時已結束需要重新點擊 否則就將這個差值作為倒計時開始的數字

    3)沒有需要重新點擊開始倒計時

    閑話少說,上代碼~~~~

<html>
<head>
<title>JS倒計時(無視刷新)</title>

<style>
.disabled {
    background: #fff;
    color: #ccc;
    border: solid 0px;
}
.disabled:hover {
     background:none;
      color: #ccc;
}
</style>
</head>
<body>

<input type="tel" placeholder="請輸入手機號" name="Phone">
<a class="fasong" id="btnSend" style="cursor:pointer;">發送驗證碼</a>
</body>

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script language="javascript">

$(function () {
  //點擊發送驗證碼
    $('body').on('click', '#btnSend', function () {
          $('body').off('click', '#btnSend');
          LockButton('#btnSend', 60);
      }) 
	  
    //讀取cookie
    if ($.cookie("djsendtime") != undefined && !isNaN($.cookie("djsendtime"))) {  //讀取到了cookie值
        var djsendtime = $.cookie("djsendtime");
        var now = new Date().getTime();  //當前時間戳
        var locksecends = parseInt((djsendtime - now) / 1000);
        if (locksecends <= 0) {
            $.cookie("djsendtime", null);
        } else {
            LockButton('#btnSend', locksecends);
        }
    }
 
})

// 按鈕倒計時
var LockButton = function (btnObjId, locksecends) {
    //1.獲取當前系統時間
    //2.獲取 locksecends 后的系統時間
    //3.用cookie保存到期時間
    //4.每次加載后獲取cookie中保存的時間
    //5.用到期時間減去當前時間獲取倒計時
    var djsendtime = $.cookie("djsendtime");
    if (djsendtime == null || djsendtime == undefined || djsendtime == 'undefined' || djsendtime == 'null') {
        var now = new Date().getTime();  //當前時間戳
        var endtime = locksecends * 1000 + now;  //結束時間戳
        $.cookie("djsendtime", endtime);  //將結束時間保存到cookie 
    }
    $(btnObjId).addClass('disabled').attr('disabled', 'disabled').text('(' + locksecends + ')秒后重新獲取');
    $('body').off('click', '#btnSendSMS');
    var timer = setInterval(function () {
        locksecends--;
        $(btnObjId).text('(' + locksecends + ')秒后重新獲取');
        if (locksecends <= 0) {
		//倒計時結束清除cookie值
            $.cookie("djsendtime", null);
            $(btnObjId).removeClass('disabled').removeAttr('disabled').text('重新獲取');
            $('body').on('click', btnObjId);
            clearInterval(timer);
        }
    }, 1000);
};
</script>

</html>

運行:  

無論怎么刷新,倒計時都會繼續不會重新開始

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM