實現刷新頁面時,倒計時仍可正常顯示,不清除記錄。
思路:將當前時間記錄在本地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尼克。我們一起學習計算機相關知識
