JQuery 如果页面关闭,倒数计时器不计数
JQuery Countdown timer not counting if page closed
我的倒计时有问题,我可以将计时器存储在本地存储中,但如果我关闭页面,计时器不计数,如果我再次打开页面,计时器将再次开始计时。当我关闭页面并再次打开它时,如何使计时器仍在计数。我正在使用 keith-wood countdown
这是我的代码
$(function () {
var temporary=3600;
if (window.localStorage.getItem("detik")!=null)
{
temporary=window.localStorage.getItem("detik");
}
else {
window.localStorage.setItem("detik",temporary);
}
$('#defaultCountdown').countdown(
{
until:+temporary,
compact: true,
onExpiry: end,
onTick:function(e)
{
var detik=(e[4]*3600)+(e[5]*60)+e[6];
window.localStorage.setItem("detik",detik);
}});
});
function end() {
alert('We have lift off!');
}
谢谢你,干杯!
嗯,您不能指望 javascript 在页面关闭时继续倒计时。因此,与其保存剩余的秒数,不如保存计时器将达到 0 的时间戳。
var reachZeroOn;
if (window.localStorage.getItem("reachZeroOn") !== null) {
reachZeroOn = new Date(window.localStorage.getItem("reachZeroOn"));
} else {
reachZeroOn = new Date((new Date).getTime() + 3600000);
window.localStorage.setItem("reachZeroOn", reachZeroOn);
}
$('#defaultCountdown').countdown({
until: reachZeroOn,
compact: true,
onExpiry: end,
});
function end() {
alert('We have lift off!');
}
工作示例:jsFiddle
确实,如果您关闭浏览器或离开浏览器,页面 JavaScript 不会 运行。
因此,如果您将剩余秒数存储在 localStorage 中,那么当您返回时,该数字将不会改变,从而产生您注意到的行为。
您应该存储计数器倒计时的绝对时间,而不是存储剩余秒数。这个值在倒计时期间不会改变,所以如果你离开页面再回来也不会有问题。您也不必每次都更新 localStorage。
代码如下:
// read previous deadline (unix time) or default to
// current time + 1 hour:
var deadline = +window.localStorage.getItem("detik")
|| new Date().getTime() + 3600*1000;
// save this time:
window.localStorage.setItem("detik", deadline);
if (deadline < new Date().getTime()) {
// In case during the user's absence the timer already expired:
end();
} else {
$('#defaultCountdown').countdown({
until: new Date(deadline),
compact: true,
onExpiry: end,
});
}
确保先删除您可能已有的 localStorage 条目。
我的倒计时有问题,我可以将计时器存储在本地存储中,但如果我关闭页面,计时器不计数,如果我再次打开页面,计时器将再次开始计时。当我关闭页面并再次打开它时,如何使计时器仍在计数。我正在使用 keith-wood countdown
这是我的代码
$(function () {
var temporary=3600;
if (window.localStorage.getItem("detik")!=null)
{
temporary=window.localStorage.getItem("detik");
}
else {
window.localStorage.setItem("detik",temporary);
}
$('#defaultCountdown').countdown(
{
until:+temporary,
compact: true,
onExpiry: end,
onTick:function(e)
{
var detik=(e[4]*3600)+(e[5]*60)+e[6];
window.localStorage.setItem("detik",detik);
}});
});
function end() {
alert('We have lift off!');
}
谢谢你,干杯!
嗯,您不能指望 javascript 在页面关闭时继续倒计时。因此,与其保存剩余的秒数,不如保存计时器将达到 0 的时间戳。
var reachZeroOn;
if (window.localStorage.getItem("reachZeroOn") !== null) {
reachZeroOn = new Date(window.localStorage.getItem("reachZeroOn"));
} else {
reachZeroOn = new Date((new Date).getTime() + 3600000);
window.localStorage.setItem("reachZeroOn", reachZeroOn);
}
$('#defaultCountdown').countdown({
until: reachZeroOn,
compact: true,
onExpiry: end,
});
function end() {
alert('We have lift off!');
}
工作示例:jsFiddle
确实,如果您关闭浏览器或离开浏览器,页面 JavaScript 不会 运行。
因此,如果您将剩余秒数存储在 localStorage 中,那么当您返回时,该数字将不会改变,从而产生您注意到的行为。
您应该存储计数器倒计时的绝对时间,而不是存储剩余秒数。这个值在倒计时期间不会改变,所以如果你离开页面再回来也不会有问题。您也不必每次都更新 localStorage。
代码如下:
// read previous deadline (unix time) or default to
// current time + 1 hour:
var deadline = +window.localStorage.getItem("detik")
|| new Date().getTime() + 3600*1000;
// save this time:
window.localStorage.setItem("detik", deadline);
if (deadline < new Date().getTime()) {
// In case during the user's absence the timer already expired:
end();
} else {
$('#defaultCountdown').countdown({
until: new Date(deadline),
compact: true,
onExpiry: end,
});
}
确保先删除您可能已有的 localStorage 条目。