v26110267 预览:首页头图倒计时翻牌;百宝箱入口人数改几十万带小数;30 个测试开始页按参考图精简居中;产假计算器模式(calc=1)计算器置顶

Co-Authored-By: AI 助手
This commit is contained in:
deploy
2026-11-03 22:26:34 +00:00
parent a536e81e01
commit aabe4f9b38
14 changed files with 211 additions and 138 deletions

41
js/hero-cd.js Normal file
View File

@@ -0,0 +1,41 @@
/* 首页头图倒计时(11-03 用户:「头图小孩左边改成倒计时那种感觉」)
· 天数做成翻页数字牌(每位一块毛玻璃牌,中间一道翻页缝),变化时逐位翻一下;
· 下面一行「时 分 秒」每秒走字 = 到今天 24:00 还剩多少 —— 和天数合起来就是「到预产期那天结束」,跟别处的「还有 N 天」对得上;
· 数据只认 app.js setHero 传进来的天数(window.__mbHeroLeft),0 = 不开倒计时(未填预产期 / 已出生 / 已到预产期),整块隐藏、回到旧样式。 */
(function () {
var box = document.getElementById('heroCd'), pane = box && box.closest('.hero-pane');
if (!box) return;
var cur = '', timer = 0;
var p2 = function (n) { return (n < 10 ? '0' : '') + n; };
box.innerHTML =
'<span class="cd-lb"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 21s-8-5-8-11a4.5 4.5 0 018-2.8A4.5 4.5 0 0120 10c0 6-8 11-8 11z" fill="currentColor"/></svg>距离和宝宝见面还有</span>' +
'<div class="cd-row"><span class="cd-d" id="heroCdD"></span><em>天</em></div>' +
'<div class="cd-tk"><b id="heroCdH">--</b><i>时</i><b id="heroCdM">--</b><i>分</i><b id="heroCdS">--</b><i>秒</i></div>';
var D = document.getElementById('heroCdD'), H = document.getElementById('heroCdH'), M = document.getElementById('heroCdM'), S = document.getElementById('heroCdS');
function tick() {
var n = new Date(), e = new Date(n.getFullYear(), n.getMonth(), n.getDate() + 1), r = Math.max(0, Math.floor((e - n) / 1000));
H.textContent = p2(Math.floor(r / 3600)); M.textContent = p2(Math.floor(r / 60) % 60); S.textContent = p2(r % 60);
}
function setDays(v) {
var s = String(v), old = cur; cur = s;
if (D.children.length !== s.length) D.innerHTML = s.split('').map(function () { return '<i><span></span></i>'; }).join('');
s.split('').forEach(function (ch, k) {
var c = D.children[k], sp = c.firstChild;
if (sp.textContent === ch) return;
sp.textContent = ch;
if (old) { c.classList.remove('flip'); void c.offsetWidth; c.classList.add('flip'); }
});
}
window.__mbHeroCd = function (left) {
left = +left || 0;
var on = left > 0;
pane && pane.classList.toggle('cd', on);
if (!on) { clearInterval(timer); timer = 0; cur = ''; return; }
setDays(left);
tick();
if (!timer) timer = setInterval(tick, 1000);
};
/* 停在后台时不走字,回前台立刻补一次 */
document.addEventListener('visibilitychange', function () { if (!document.hidden && timer) tick(); });
if (window.__mbHeroLeft != null) window.__mbHeroCd(window.__mbHeroLeft);
})();