javascript 计时器和会话存储
javascript timer and sessionStorage
我有以下问题。我有一个计时器功能,它需要一个参数,即秒数。直接通过它时,它可以正常工作。但是,由于多种原因我需要使用 sessionStorage,当我在将变量传递给计时器函数之前从 sessionStorage 检索变量时,它乘以 10 传递给参数的秒数。我不明白为什么它有这种行为。
我写了一个最小的例子来说明我的问题:
function countdown(time_p) {
var saved_countdown = sessionStorage.getItem('saved_countdown');
var time;
if (saved_countdown == null) {
// Set the time we're counting down to using the time allowed
var new_countdown = new Date().getTime() + (time_p + 2) * 1000;
time = new_countdown;
sessionStorage.setItem('saved_countdown', new_countdown);
} else {
time = saved_countdown;
}
// Update the count down every 1 second
var x = setInterval(() => {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the allowed time
var distance = time - now;
// Time counter
var counter = Math.floor(distance / 1000);
// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = counter + " s";
// If the count down is over, write some text
if (counter <= 0) {
clearInterval(x);
sessionStorage.removeItem('saved_countdown');
sessionStorage.removeItem('max_time');
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
}
$("#confirm_settings").click(function() {
var time = $("#time").val();
console.log("time entered" + time);
sessionStorage.setItem('max_time', time);
time = sessionStorage.getItem('max_time'); // multiply the time entered by 10 ...
// time = 42; // works well
console.log("time = " + time);
countdown(time);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<p id="demo"> </p>
<label for "time"> Time limit :</label>
<input type="text" id="time" placeholder="enter a duration (s)"> <br>
<button type="button" id="confirm_settings">OK</button>
window storage 保存字符串。您需要将它们转换为整数:
function countdown(time_p) {
var time = sessionStorage.getItem('saved_countdown');
if (time) {
time = +time; // cast the string to number
}
else {
// Set the time we're counting down to using the time allowed
var new_countdown = new Date().getTime() + (time_p + 2) * 1000;
time = new_countdown;
sessionStorage.setItem('saved_countdown', new_countdown);
}
我有以下问题。我有一个计时器功能,它需要一个参数,即秒数。直接通过它时,它可以正常工作。但是,由于多种原因我需要使用 sessionStorage,当我在将变量传递给计时器函数之前从 sessionStorage 检索变量时,它乘以 10 传递给参数的秒数。我不明白为什么它有这种行为。 我写了一个最小的例子来说明我的问题:
function countdown(time_p) {
var saved_countdown = sessionStorage.getItem('saved_countdown');
var time;
if (saved_countdown == null) {
// Set the time we're counting down to using the time allowed
var new_countdown = new Date().getTime() + (time_p + 2) * 1000;
time = new_countdown;
sessionStorage.setItem('saved_countdown', new_countdown);
} else {
time = saved_countdown;
}
// Update the count down every 1 second
var x = setInterval(() => {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the allowed time
var distance = time - now;
// Time counter
var counter = Math.floor(distance / 1000);
// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = counter + " s";
// If the count down is over, write some text
if (counter <= 0) {
clearInterval(x);
sessionStorage.removeItem('saved_countdown');
sessionStorage.removeItem('max_time');
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
}
$("#confirm_settings").click(function() {
var time = $("#time").val();
console.log("time entered" + time);
sessionStorage.setItem('max_time', time);
time = sessionStorage.getItem('max_time'); // multiply the time entered by 10 ...
// time = 42; // works well
console.log("time = " + time);
countdown(time);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<p id="demo"> </p>
<label for "time"> Time limit :</label>
<input type="text" id="time" placeholder="enter a duration (s)"> <br>
<button type="button" id="confirm_settings">OK</button>
window storage 保存字符串。您需要将它们转换为整数:
function countdown(time_p) {
var time = sessionStorage.getItem('saved_countdown');
if (time) {
time = +time; // cast the string to number
}
else {
// Set the time we're counting down to using the time allowed
var new_countdown = new Date().getTime() + (time_p + 2) * 1000;
time = new_countdown;
sessionStorage.setItem('saved_countdown', new_countdown);
}