Files
2026-08-24 06:23:07 +08:00

66 lines
1.8 KiB
JavaScript

/* 倒计时与 JS 链并行(秒数与 config.js countdownSeconds 一致 = 8)。
* ?e=0 整页刷新不重置截止时间;到点必定跳 index,不受 ?e=0 影响。 */
(function () {
var TOTAL_SEC = 8;
var KEY = "__er_countdown_deadline_ms";
var LANDED = "__er_landed";
var INDEX_URL = "/index.html?landed=1";
var CIRC = 2 * Math.PI * 54;
try {
if (sessionStorage.getItem(LANDED) === "1") {
// 已进过 index:链后续若再导航到 /qqtime/?e=0,立刻回落地页
location.replace(INDEX_URL);
return;
}
} catch (e0) {}
var now = Date.now();
var deadline = 0;
try {
deadline = parseInt(sessionStorage.getItem(KEY) || "0", 10) || 0;
} catch (e) {}
// 仅首次写入截止时间;?e=0 刷新沿用原 deadline,倒计时不归零
if (!deadline || deadline < now - 5000) {
deadline = now + TOTAL_SEC * 1000;
try {
sessionStorage.setItem(KEY, String(deadline));
} catch (e2) {}
}
var countEl = document.getElementById("count");
var fg = document.getElementById("fg");
if (fg) fg.style.strokeDasharray = String(CIRC);
var jumped = false;
function goIndex() {
if (jumped) return;
jumped = true;
try {
sessionStorage.setItem(LANDED, "1");
sessionStorage.removeItem(KEY);
} catch (e3) {}
location.replace(INDEX_URL);
}
function tick() {
var leftMs = deadline - Date.now();
var left = Math.max(0, Math.ceil(leftMs / 1000));
if (countEl) countEl.textContent = String(left);
if (fg) {
var progressed = Math.min(
1,
Math.max(0, 1 - leftMs / (TOTAL_SEC * 1000))
);
fg.style.strokeDashoffset = String(CIRC * (1 - progressed));
}
if (leftMs <= 0) {
goIndex();
return;
}
setTimeout(tick, 200);
}
tick();
})();