重新啓動的Jquery/JavaScript的計時器,這是我對SO :)不上刷新
我需要在jQuery的一個定時器或JavaScript會倒計時15分鐘,比顯示關閉按鈕的第一個問題。另外,當用戶刷新頁面時,它不應該重置,但要麼繼續它停止的地方,要麼完成倒計時,而不取決於用戶是否回來,即如果用戶在16分鐘後返回,他將看到消息和關閉按鈕。有什麼建議麼?
非常感謝!
重新啓動的Jquery/JavaScript的計時器,這是我對SO :)不上刷新
我需要在jQuery的一個定時器或JavaScript會倒計時15分鐘,比顯示關閉按鈕的第一個問題。另外,當用戶刷新頁面時,它不應該重置,但要麼繼續它停止的地方,要麼完成倒計時,而不取決於用戶是否回來,即如果用戶在16分鐘後返回,他將看到消息和關閉按鈕。有什麼建議麼?
非常感謝!
多個選項使用卸載方法,保留時間值轉換成瀏覽器的數據存儲: - 餅乾 - localStorage的等
理想的方式 - 保存在用戶會話啓動服務器上的工作流的時間目的。 每當頁面重新加載發生得值/經過時間的用戶界面,並顯示適當的消息
試試這個,它使用jquery-cookie,你必須下載並在您的腳本,並適用於所有的主流瀏覽器:
/* get the time passed from the cookie, if one is set */
var count = parseInt(($.cookie('mytimeout') || 0), 10);
/* set an interval that adds seconds to the count */
var interval = setInterval(function() {
count++;
/* plus, you can do something you want to do every second here,
like display the countdown to the user */
}, 1000);
/* set a timeout that expires 900000 Milliseconds (15 Minutes) -
the already passed time from now */
var timeout = setTimeout(function() {
/* put here what you want to do once the timer epires */
/* clear the Interval */
clearInterval(interval);
}, 900000 - count*1000);
/* before the window is reloaded or closed, store the current timeout in a cookie.
For cookie options visit jquery-cookie */
window.onbeforeunload = function() {
$.cookie('mytimeout', count, { expires: 7, path: '/' });
};
Here's a jsfiddle to see it working
And here's a version with buttons to start and reset
如果您希望的時間通過即使用戶不在頁面上,你可以使用new Date().getTime()
獲取一次訪問和下次訪問之間傳遞的毫秒數。因此,改變這種:
/* get the last time the user visited the page */
var lastTime = parseInt(($.cookie('timepassed') || new Date().getTime()), 10);
/* add elapsed time to the count. If the count is negative, set it to 0 */
var count = Math.max(parseInt(($.cookie('mytimeout') || 0), 10) + parseInt((new Date().getTime() - lastTime)/1000, 10), 0);
/* set the time passed on unload */
window.onbeforeunload = function() {
$.cookie('mytimeout', count, { expires: 7, path: '/' });
$.cookie('timepassed', new Date().getTime(), { expires: 7, path: '/' });
};
重要:這是不是安全的,用戶可以操縱計數,但如果你想要做安全的腳本,JS是不是它的工具。
UPDATE
下面是該一個localStorage
溶液。但是當你從評論看,你可以操縱該定時器,很容易
當用戶不在頁面上,計時器將不會倒計時。它只是記得櫃檯離開時的狀態。但你知道基本的想法。您可以Date.getTime()
那種情景,以改善它:P
var updateTimer = function() {
timer = localStorage.getItem('timer') || 0;
if (timer === 0) {
$("div#timer").html("Timer is unset");
} else {
timer--;
localStorage.setItem('timer', timer);
$("div#timer").html(timer);
}
};
$(function() {
setInterval(updateTimer, 1000);
$("#start").click(function() {
localStorage.setItem('timer', 500);
});
});
謝謝;)很多這個計時器,不會倒計時,當你不在網頁上,所以基本上這是一個錯誤的策略無論如何:) – drinchev 2013-05-14 09:07:17
@Stano,你不必刪除你的評論 - 你可以把答案這頁,我將upvote:P。只是想注意到用這種方式寫的計時器在用戶離開頁面時不會激活。因此,如果有人打開計數器並稍後關閉該頁面,則當他打開該計數器時,倒計時將從上次打開該頁面開始繼續。你可以通過在計數器應該完成的時候放入'localStorage'來解決這個問題,setInterval可以在每分鐘計算一次。 :) 就這樣 – drinchev 2013-05-14 10:00:45
任何可以來我的腦海裏是使用本地緩存來保存定時器的值 – 2013-05-14 08:14:23
爲此,您需要是'localStorage'支持或cookies和serverside的東西 – drinchev 2013-05-14 08:14:40
如果重要的是用戶不能在15分鐘後繞過關閉我不會在JS中這樣做,用戶可以操縱cookie或localStorage。你仍然需要一個計時器來顯示剩下的時間,但是檢查時間是否已經過去也應該在服務器端完成。 – HMR 2013-05-14 08:19:47