v26110287 百宝箱:生娃计算器固定第一条带火苗;6条随机2~3条滚动、每5~7秒换一批

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-04 02:00:33 +00:00
parent 95a4255904
commit f38513d2f5
10 changed files with 62 additions and 34 deletions

View File

@@ -9,7 +9,7 @@
if (/[?&]kit=0(?:&|$)/.test(location.search)) return;
var box = document.getElementById('kit'), sec = document.getElementById('kitHome');
if (!box || !sec) return;
var V = '26110286';
var V = '26110287';
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/kit.css?v=' + V; document.head.appendChild(l);
document.documentElement.classList.add('has-kit');
@@ -88,9 +88,12 @@
}
var cl = CALC.filter(function (x) { return !(x.gate && wk && wk < x.gate); });
if (b >= 5) cl = [cl[cl.length - 1]].concat(cl.slice(0, -1)); /* 孕 29 周起产假排前 */
/* 11-04 用户:「生娃计算器放第一个,标个火」→ 计算器两条里 huafei 必在,排到 6 条最前(hot) */
var hf = CALC[0]; cl = [hf].concat(cl.filter(function (x) { return x !== hf; }));
cl.slice(0, 2).forEach(function (x) { out.js.push({ q: x.q, href: x.h + (x.cm ? (location.search ? location.search + '&' : '?') + 'calc=1' : location.search) + location.hash, n: total() * x.heat, u: '人算过' }); });
var r = [];
for (var k = 0; k < 2; k++) ['qz', 'qa', 'js'].forEach(function (c) { if (out[c][k]) r.push(Object.assign({ c: c }, out[c][k])); });
if (out.js[0]) r.push(Object.assign({ c: 'js', hot: 1 }, out.js[0]));
[['qz', 0], ['qa', 0], ['js', 1], ['qz', 1], ['qa', 1]].forEach(function (p) { if (out[p[0]][p[1]]) r.push(Object.assign({ c: p[0] }, out[p[0]][p[1]])); });
return { r: r, wk: wk };
}
var TAG = { qz: '测试', qa: '百问', js: '计算器' };
@@ -108,16 +111,16 @@
/* 11-03 用户:「这 6 条跟下面孕妈广场那 6 条太像,换个形式」→(便签墙试过,用户要回到一行一条的排列,只换样式)
一行一条,但不用名次数字和配图:左边按类型的彩色图标块(测试紫 / 百问绿 / 计算器橙),中间问题 + 类型·人数,右边 ›(11-03 用户嫌乱,样式收成一张白卡,见 kit.css)。 */
L.className = 'kit-list kit-rows';
var can = d.r.map(function (x, i) { return lvList(x) ? i : -1; }).filter(function (i) { return i >= 0; });
if (!LV_PICK || LV_PICK.some(function (i) { return can.indexOf(i) < 0; })) {
LV_PICK = can.slice().sort(function () { return Math.random() - .5; }).slice(0, 2);
}
L.innerHTML = d.r.map(function (x, i) {
var lv = LV_PICK.indexOf(i) >= 0 && lvList(x);
return '<a class="kr ripple t-' + x.c + '" href="' + esc(x.href) + '"><span class="kr-ic kr-ch">' + KR_CH[x.c] + '</span>' +
'<span class="kr-m"><span class="kr-q">' + esc(x.q) + '</span>' + (lv ? lvHTML(lv) : '<span class="kr-n"><em>' + TAG[x.c] + '</em>' + FIRE + '<b>' + wan(x.n) + '</b>' + x.u + '</span>') + '</span>' +
/* 11-04 二改:「不用固定两个,6 条里随机 2~3 条在滚,一会儿换别的」→ 每条都备好静态行 + 滚动行(.kr-sw 叠放),
lvShuffle 每 5~7 秒随机定 2~3 条显示滚动(每次至少换 1 条),其余显示「类型 · 人数」 */
L.innerHTML = d.r.map(function (x) {
var lv = lvList(x);
return '<a class="kr ripple t-' + x.c + (x.hot ? ' hot' : '') + '" href="' + esc(x.href) + '"><span class="kr-ic kr-ch">' + KR_CH[x.c] +
(x.hot ? '<i class="kr-hot" aria-label="最热">' + FIRE + '</i>' : '') + '</span>' +
'<span class="kr-m"><span class="kr-q">' + esc(x.q) + '</span><span class="kr-sw"><span class="kr-n"><em>' + TAG[x.c] + '</em>' + FIRE + '<b>' + wan(x.n) + '</b>' + x.u + '</span>' + (lv ? lvHTML(lv) : '') + '</span></span>' +
'<span class="kr-go">' + KR_GO[x.c] + '</span></a>';
}).join('');
lvShuffle();
lvRun();
}
/* ---------- 6 条里随机 2 条:类型·人数 那一行换成「谁测出了什么 / 谁算出了多少」滚动 ----------
@@ -133,12 +136,13 @@
'/taier-guzhong/': ['估出宝宝约 <b>1.6 斤</b>', '估出宝宝约 <b>2.3 斤</b>', '估出宝宝约 <b>3.1 斤</b>'],
'topic/zhichang/': ['算出产假能休 <b>178 天</b>(广东)', '算出产假能休 <b>158 天</b>(上海)', '算出产假能休 <b>188 天</b>(河南)', '算出产假能休 <b>180 天</b>(吉林)']
};
var LV_PICK = null, lvT = 0, lvN = Math.floor(Math.random() * LV_NM.length);
var lvT = 0, lvN = Math.floor(Math.random() * LV_NM.length);
function lvList(x) {
if (x.c === 'qz') {
var id = (x.href.match(/[?&]id=(t\d+)/) || [])[1], r = (window.GC_RES || {})[id];
return r && r.length ? r.map(function (t) { return '测出「' + esc(t) + '」'; }) : null;
}
if (x.c === 'qa') return ['刚看完这条', '正在看', '收藏了这条', '把这条转给了老公'];
var k = Object.keys(LV_JS).filter(function (h) { return x.href.indexOf(h) === 0; })[0];
return k ? LV_JS[k] : null;
}
@@ -148,13 +152,26 @@
return '<span class="lv-i' + (i ? '' : ' on') + '"><img src="assets/img/mom/' + LV_AV[j] + '.jpg" alt="" loading="lazy" width="16" height="16"><em>' + LV_NM[j] + '</em>' + t + '</span>';
}).join('') + '</span>';
}
var lvS = 0, LV_ON = [];
function lvShuffle() {
var rs = [].slice.call(box.querySelectorAll('.kit-rows .kr')).filter(function (r) { return r.querySelector('.kr-lv'); });
if (!rs.length) return;
var n = Math.min(rs.length, Math.random() < .5 ? 2 : 3), nx, t = 0;
do { /* 随机挑 n 条;和上一轮完全一样就重挑,保证每次都有变化 */
nx = rs.map(function (r, i) { return i; }).sort(function () { return Math.random() - .5; }).slice(0, n).sort();
} while (nx.join() === LV_ON.join() && ++t < 9);
LV_ON = nx;
rs.forEach(function (r, i) { r.classList.toggle('live', LV_ON.indexOf(i) >= 0); });
clearTimeout(lvS);
lvS = setTimeout(lvShuffle, 5000 + Math.random() * 2000);
}
function lvRun() {
clearInterval(lvT);
lvT = setInterval(function () {
if (document.hidden) return;
box.querySelectorAll('.kr-lv').forEach(function (w) {
var a = w.querySelector('.lv-i.on'), b = (a && a.nextElementSibling) || w.firstElementChild;
if (!a || a === b) return;
if (!a || a === b || !w.closest('.kr.live')) return;
a.classList.remove('on'); a.classList.add('up'); setTimeout(function () { a.classList.remove('up'); }, 450);
b.classList.add('on');
});