2016-04-05 3 views
-1

したがって、「index.html」と「info.html」という2つのページがあるとします。 index.htmlのページには、ボタンとスパンがあります。ボタンを押すと、カウントダウンタイマーがそのスパンで開始します。タイマーがゼロになると何かが起こります。問題は、私がカウントダウンを開始すると、info.htmlページに行き、index.htmlに戻るとタイマーがリセットされるということです。もちろん、これはindex.htmlを離れるときにスクリプトがアンロードされることによって発生しますが、これを解決するにはどうすればよいですか?私がカウントダウンに50秒残っていて、index.htmlを離れると、info.htmlページに30秒滞在します。戻ってくると、20秒待ってください。 アイデアHTMLでページを変更するときにスクリプトを実行し続ける

+2

がクッキーにタイマーチェックポイントを保存するか(バックグラウンドで非同期数学のための)共有webworkersを使用して –

+0

いくつかのクッキーを作ります値はindex.htmlの( 'setInterval')を使って1秒ごとに増加し、他のページでも続きます。 – callback

+0

タイマーが開始すると、ローカルクッキーに目標時間(ゼロになる)を保存します。各ページで、クッキーを読んで、そのターゲットにカウントダウンするタイマーを開始します。 (残りの秒*をクッキーに保存しないでください。または、ページがアンロードされて読み込まれるとタイマーがドリフトします。変更しない*ターゲット*を保存してください) – David

答えて

0

ローカルストレージに残っている時間を保存できます。ページが更新された場合、スクリプトは、ローカルストレージから値をロードして、新しい値でタイマーを開始します:

function nonStopTimer(cb, seconds) { 
    var KEY = 'nonStopTimer' 
    var secsRemaining = localStorage[KEY]; 

    if (!secsRemaining) { 
    secsRemaining = seconds; 
    } 

    setTimeout(function() { 
    localStorage[KEY] = null; 
    cb(); 
    }, secsRemaining * 1000); 

    setInterval(function() { 
    secsRemaining -= 1; 
    localStorage[KEY] = secsRemaining; 
    }, 1000); 
} 
+0

さて、これはうまく見える、ありがとう!私はそれを試してみましょう。 –

+0

問題がある場合は教えてください。 – nstoitsev

1

タイマー情報は、ローカルストレージまたはセッションストレージに保存してください(Web Storage参照)。だから、例えば、ページロードの

var countdownEndsAt = localStorage.getItem("countdownEndsAt"); 
if (countdownEndsAt) { 
    countdownEndsAt = +countdownEndsAt; 
    if (countdownEndsAt < Date.now() { 
     // It's already happened, decide what to do 
    } 
} 
if (!countdownEndsAt) { // Separate 'if' in case you decide to clear it in the "it's already happened" above 
    countdownEndsAt = Date.now() + 60000; 
    localStorage.setItem("countdownEndsAt", countdownEndsAt); // Gets converted to a string 
} 

countdownEndsAtは今、タイマーがオフに行くべき時間値が含まれています。

関連する問題