v26110287 百宝箱:生娃计算器固定第一条带火苗;6条随机2~3条滚动、每5~7秒换一批
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
41
js/kit.js
41
js/kit.js
@@ -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');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user