Files
aurora-admin/site/sources/countdown/html.txt
T
aurora-admin c65a69c34e
Deploy to GitHub Pages / deploy (push) Failing after 16s
Regression / regression (push) Failing after 15m2s
feat(P4): precompute移植+app.js sources双向回填+回归1003/1003+验收体积/文件/data.json
2026-09-12 14:18:41 +08:00

46 lines
2.0 KiB
Plaintext

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Aurora Admin · Countdown</title>
<link rel="stylesheet" href="../.design_library/aurora-admin/colors_and_type.css" />
<link rel="stylesheet" href="./Countdown.css" />
</head>
<body>
<div class="aa-page">
<h2 class="aa-h2">Countdown 倒计时</h2>
<p class="aa-desc">用于秒杀、验证码、会议开始等场景,支持天/时/分/秒,结束触发回调。</p>
<div class="aa-demo">
<div class="aa-demo__title">距活动结束</div>
<div class="aa-countdown" role="timer" aria-live="polite" id="cd"></div>
</div>
</div>
<script>
var target = Date.now() + 2 * 3600 * 1000 + 35 * 60 * 1000 + 12 * 1000; // 2h35m12s
var root = document.getElementById('cd');
function renderCountdown() {
var diff = target - Date.now();
if (diff <= 0) {
clearInterval(timer);
root.innerHTML = '<span class="aa-countdown-done" role="timer" aria-live="polite">活动已结束</span>';
return;
}
var s = Math.floor(diff / 1000);
var d = Math.floor(s / 86400); s %= 86400;
var h = Math.floor(s / 3600); s %= 3600;
var m = Math.floor(s / 60); var sec = s % 60;
var pad = function (n) { return String(n).padStart(2, '0'); };
var seg = function (num, label) {
return '<div class="aa-countdown-seg" role="timer" aria-live="polite"><span class="aa-countdown-num" aria-live="polite">' + pad(num) + '</span><span class="aa-countdown-label" aria-live="polite">' + label + '</span></div>';
};
root.innerHTML = (d > 0 ? seg(d, '天') : '') + seg(h, '时') + '<span class="aa-countdown-sep" aria-live="polite">:</span>' + seg(m, '分') + '<span class="aa-countdown-sep" aria-live="polite">:</span>' + seg(sec, '秒');
}
renderCountdown(); // 首帧立即渲染,避免初始 1 秒空白
var timer = setInterval(renderCountdown, 1000);
</script>
</body>
</html>