2017-02-15 6 views
1

私のタイマーをlocalStorageに保存する際に問題があります。ブラウザを更新するたびに、タイマーがリセットされます。今私がやりたいことは、ユーザーがブラウザをリフレッシュするたびに、タイマーをlocalStorageに保存して、タイマーがリセットされないようにすることです。ページがリフレッシュされると、JavaScriptが内蔵JavaScriptがリセットされます

HTMLの下に私のコードを確認してください

<p class="w3-xlarge w3-serif"> <i>Linguistics Exam</i><span class="w3-right" id="timeLeft" name="timeLeft"></span></p> 

JS

var total_seconds = 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
    document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

    if(total_seconds <= 0){ 
     $(document).ready(function(){$("#submitLinguistics").click();}); 

    }else{ 
     total_seconds = total_seconds - 1; 
     c_minutes = parseInt(total_seconds/60); 
     c_seconds = parseInt(total_seconds%60); 
     setTimeout("checkTime()", 1000); 
    } 
} 
setTimeout("checkTime()", 1000); 
+1

「localStorage」に保存するコードはどこですか? –

答えて

2

まず、手動で各インスタンスでsetTimeoutを呼び出すのではなく、各二時に実行されますsetIntervalからsetTimeoutを、変更します。

var total_seconds = 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

if(total_seconds <= 0){ 
    $(document).ready(function(){$("#submitLinguistics").click();}); 
    clearInterval(myInterval); 
}else{ 
    total_seconds = total_seconds - 1; 
    c_minutes = parseInt(total_seconds/60); 
    c_seconds = parseInt(total_seconds%60); 
} 
} 
var myInterval = setInterval(checkTime, 1000); 

次に、あなたは、タブを閉じて、しばらくたってから再度開く場合は、カウンタはそれがあった場所から再ロードされ、ユーザーは、タブを閉じるに取り組んでごまかすことができ、

var total_seconds = localStorage.getItem("total_seconds") ? localStorage.getItem("total_seconds") : 40*60; 
var c_minutes = parseInt(total_seconds/60); 
var c_seconds = parseInt(total_seconds%60); 

function checkTime(){ 
document.getElementById("timeLeft").innerHTML = 'Time Left: ' + c_minutes + ' : ' + c_seconds; 

if(total_seconds <= 0){ 
    $(document).ready(function(){$("#submitLinguistics").click();}); 
    clearInterval(myInterval); 
}else{ 
    total_seconds = total_seconds - 1; 
    c_minutes = parseInt(total_seconds/60); 
    c_seconds = parseInt(total_seconds%60); 
} 
localStorage.setItem("total_seconds", total_seconds); 
} 
var myInterval = setInterval(checkTime, 1000); 

を最後に:あなたはlocalStoragetotal_secondsを作成する必要があります答えを出してもう一度開きます。このような状況に対処するには、localStorageではなく、実際の日付とローディングを使用してサーバーと連携することをお勧めします。プログラマユーザーは、devツールのコンソールからタイマーをリセットすることさえできます。

+0

ラージスさんありがとうございます。それは私のために働いた。しかし、私はすべてのユーザーに異なるタイマーを与える問題を持っています。私はそれを探して、代わりにsessionStorageを使用しました。残念なことに、sessionStorageを使用しても、別のユーザーであってもタイマーはリセットされません。サーバーと協力せずにこのための任意のソリューションですか?ありがとうございました –

+0

@AngeloSañoあなたはlocalStorage.getItem( "total_seconds" + theusername)とlocalStorage.setItem( "total_seconds" + theusername、total_seconds)を使用できます。それを達成する。しかし、異なるユーザーが異なるブラウザーを使用している場合、localStorageは異なるでしょう。 localStorageはブラウザのローカルストレージであり、ブラウザごとに異なります。私の答えがあなたの問題を解決するのに役立ったら、それを正しいものとして受け入れることを検討するかもしれません。 –

+1

ラージスさんありがとう!すぐにそれを受け入れることはできません申し訳ありませんが、私の問題を解決するのを助けたことは事実です。 –

関連する問題