66 lines
1.8 KiB
JavaScript
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();
|
|
})();
|