Files
mama-box/js/gch/v6.js

105 lines
8.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 11-03 上正式:从 demo/gch/ 并入 js/gch/(正式首页默认加载这一版)
11-02 首页「孕妈广场」效果稿 V6 · 合并版:孕妈广场(V4 故事卡堆,压矮)+ 其他妈妈也在搜(6 个问题)合成一个模块
用户定:小标题仍叫「其他妈妈也在搜」(11-03 用户改为「其他孕妈也在搜」);卡堆左右手滑、点箭头都能翻。
做法:先套 V4(v4.css + v4.js),再在卡堆下面接「其他妈妈也在搜」,原来那块 #pregTips 藏起来。
列表沿用首页 .ms-* 样式(写在 #pregTips 里的 <style>,块藏了样式照样生效),数据同 assets/data/qa/hot.json 前 6 条。 */
(function () {
var sec = document.getElementById('gcHome');
if (!sec) return;
var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = 'js/gch/v4.css?v=26110261';
document.head.appendChild(l);
var s = document.createElement('script'); s.src = 'js/gch/v4.js?v=26110261';
s.onload = function () { if (sec.querySelector('.g4-foot')) merge(); else sec.addEventListener('gc4-ready', merge, { once: true }); }; /* v4 要先拉 feed.js 才渲染 */
document.body.appendChild(s);
var FIRE = '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12.6 2.5c.4 3-1.6 4.6-3 6.2C8 10.4 7 12 7 14.3A5 5 0 0012 19.5a5 5 0 005-5.2c0-2-1-3.6-1.9-4.6-.2 1.3-.9 2.2-1.9 2.6.6-3.4-.2-7-.6-9.8z" fill="currentColor"/><path d="M12 19.5a2.6 2.6 0 01-2.6-2.6c0-1.6 1.3-2.5 2-3.6.3 1 .9 1.6 1.6 1.9.9.4 1.6 1.2 1.6 2.1A2.6 2.6 0 0112 19.5z" fill="#FFD36B"/></svg>';
var FIRE_W = '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12.6 2.5c.4 3-1.6 4.6-3 6.2C8 10.4 7 12 7 14.3A5 5 0 0012 19.5a5 5 0 005-5.2c0-2-1-3.6-1.9-4.6-.2 1.3-.9 2.2-1.9 2.6.6-3.4-.2-7-.6-9.8z" fill="#FFE07A"/></svg>';
function esc(t) { return String(t == null ? '' : t).replace(/[&<>"]/g, function (c) { return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]; }); }
function merge() {
sec.classList.add('gv6');
var mk = sec.querySelector('.g4-mark'); if (mk) { if (window.__gcDefault) mk.remove(); else mk.textContent = '效果稿 V6'; }
var old = document.getElementById('pregTips'); if (old) old.style.display = 'none';
var box = document.createElement('div');
box.className = 'g6-ms';
box.innerHTML =
'<div class="g6-mh"><h3 class="g6-mt"><span>其他孕妈也在搜</span></h3>' +
'<span class="ms-live" aria-hidden="true">' + FIRE.replace('currentColor', 'currentColor') + '实时热搜</span>' +
'</div>' +
'<div class="ms-list g6-list"></div>' +
'<button type="button" class="ms-all g6-all hide"></button>';
var foot = sec.querySelector('.g4-foot');
/* 两个测试:你是什么样的妈妈(已有 topic/ceshi)+ 你家准爸爸是哪种队友(新做 topic/duiyou) */
var QZ = [
{ href: 'topic/ceshi/', k: '妈妈类型', t: '你是什么样的妈妈?', n: '15.6万', img: 'topic/ceshi/img/hero.webp', pos: '42% 22%', who: '测你', c: '#7C5CFC', q1: '#F1ECFF', q2: '#E4DBFF', qs: 'rgba(124,92,252,.6)' },
{ href: 'topic/duiyou/', k: '队友类型', t: '准爸爸是哪种队友?', n: '8.3万', img: 'topic/duiyou/img/hero.webp', pos: '58% 24%', who: '测他', c: '#F07A2E', q1: '#FFF3E6', q2: '#FFE2C8', qs: 'rgba(240,122,46,.6)' }
];
/* 11-02 用户:「测一测出三版让我选」→ 地址 &qz=1/2/3 切换:1 插画白卡(默认)/ 2 小胶囊 / 3 你&他合体卡 */
var QV = (location.search.match(/[?&]qz=([1-4])/) || [])[1] || '4'; /* 11-02 用户定:默认用第 4 版彩色卡 */
var qz = document.createElement('div'), lk = function (q) { return esc(q.href + location.search + location.hash); };
qz.className = 'g6-qz qv' + QV;
/* 11-02 用户:「还有多少份测试」→ 头部右侧放总数入口,进孕妈广场的测一测页(30 份 = guangchang/ceshi/meta.js 条数,加减测试时同步改) */
var hd = '<div class="g6-qh">测一测<small>1 分钟,看看你和他</small><a class="g6-qa" href="' + esc('guangchang/?c=ceshi' + location.search.replace(/^\?/, '&') + location.hash) + '">全部 30 份测试 ›</a></div>';
if (QV === '4') {
/* 第 4 版:用户说「测一测要明显一点,把之前那版(紫/橙底)拿来试试」→ 彩色底 + 类型小标签 + 实心按钮 + 右下圆形插画;标题用短的,避免单字掉行 */
qz.innerHTML = hd + '<div class="g6-qr">' + QZ.map(function (q) {
return '<a class="g6-k ripple" href="' + lk(q) + '" style="--qc:' + q.c + ';--q1:' + q.q1 + ';--q2:' + q.q2 + ';--qs:' + q.qs + '">' +
'<img src="' + esc(q.img) + '" alt="" loading="lazy">' +
'<span class="g6-kk">' + esc(q.k) + '</span><b class="g6-kt">' + esc(q.t) + '</b><span class="g6-kn">' + q.n + ' 人测过</span><span class="g6-kg">去测试 ›</span></a>';
}).join('') + '</div>';
} else if (QV === '1') {
qz.innerHTML = hd + '<div class="g6-qr">' + QZ.map(function (q) {
return '<a class="g6-q ripple" href="' + lk(q) + '">' +
'<img src="' + esc(q.img) + '" alt="" loading="lazy">' +
'<span class="g6-qb"><b class="g6-qt">' + esc(q.t) + '</b><span class="g6-qf"><span>' + q.n + ' 人测过</span><span class="g6-qg">开始测 ›</span></span></span></a>';
}).join('') + '</div>';
} else if (QV === '2') {
qz.innerHTML = hd + '<div class="g6-qr">' + QZ.map(function (q) {
return '<a class="g6-c ripple" href="' + lk(q) + '"><img src="' + esc(q.img) + '" alt="" loading="lazy" style="object-position:' + q.pos + '">' +
'<span class="g6-cb"><b>' + esc(q.t) + '</b><small>' + q.n + ' 人测过</small></span><i>›</i></a>';
}).join('') + '</div>';
} else {
qz.innerHTML = hd + '<div class="g6-v"><div class="g6-vr">' + QZ.map(function (q, i) {
return (i ? '<span class="g6-amp">&amp;</span>' : '') +
'<a class="g6-vc ripple" href="' + lk(q) + '"><img src="' + esc(q.img) + '" alt="" loading="lazy" style="object-position:' + q.pos + '">' +
'<small>' + q.who + '</small><b>' + esc(q.t) + '</b><em>开始测 ›</em></a>';
}).join('') + '</div><p class="g6-vf">两个都测完,看看你们是哪种组合 · 已有 23.9万 人测过</p></div>';
}
/* 11-02 用户:「太多了,只放两个测一测」→ 3 个小列表撤掉(topic/yali、yinshi、zhunbei 页面保留,先不挂入口);
位置从卡堆下面挪到「其他妈妈也在搜」下面 */
sec.insertBefore(box, foot);
/* 11-03 用户:首页「孕期百宝箱」已有「趣味小测试」入口 → 这里两张测一测卡不要了(加 ?qzcard=1 还能看回) */
if (/[?&]qzcard=1(?:&|$)/.test(location.search)) sec.insertBefore(qz, foot);
var list = box.querySelector('.g6-list'), all = box.querySelector('.g6-all');
var tot = (window.__mbPulse && window.__mbPulse.total && +window.__mbPulse.total.value) || 1510000;
/* 11-02 按孕周出题:挑题逻辑在 app.js(window.__mbQaPick:第 1 条固定生娃计算器 + 本孕周段 4 条 + 通用 1 条),孕期数据到了(mb-preg)再刷一次 */
var BANK = null;
function paintList() {
if (!BANK || !BANK.length) return;
var pg = window.__mbPreg || {}, w = pg.week || 0;
var tag = box.querySelector('.g6-wk');
if (w) { if (!tag) { tag = document.createElement('span'); tag.className = 'g6-wk'; box.querySelector('.g6-mh').appendChild(tag); } tag.textContent = '孕 ' + w + ' 周'; }
else if (tag) tag.remove();
var pick = window.__mbQaPick ? window.__mbQaPick(BANK, w) : BANK.slice(0, 6);
list.innerHTML = pick.map(function (x, i) {
var n = tot * (+x.heat || 0), heat = x.heat ? '<span class="ms-h">' + FIRE + '<b>' + (n >= 1e4 ? Math.round(n / 1e3) / 10 + '万' : Math.round(n)) + ' 人看过</b></span>' : '';
var b = window.__mbMsBadge ? window.__mbMsBadge(i) : { t: x.badge, c: x.badge === '爆' ? 'bao' : '' };
var bd = b.t ? '<span class="ms-bd ' + b.c + '">' + (b.c === 'bao' ? FIRE_W : '') + esc(b.t) + '</span>' : '';
return '<a class="ms-it ripple" href="' + esc((x.href || '') + location.search + location.hash) + '"><i class="ms-no">' + (i + 1) + '</i>' +
'<span class="ms-m"><span class="ms-q">' + esc(x.q) + '</span>' + heat + '</span>' + bd + '<i class="ms-go">›</i></a>';
}).join('');
}
window.addEventListener('mb-preg', paintList);
fetch('assets/data/qa/hot.json?' + Date.now()).then(function (r) { return r.ok ? r.json() : []; }).catch(function () { return []; }).then(function (bank) {
if (!bank || !bank.length) { box.style.display = 'none'; return; }
BANK = bank; paintList();
if (bank.length > 6) {
all.textContent = '查看全部问题 ›';
all.classList.remove('hide');
/* 全部问题页在 app.js 里(openQA),借原来那块的「查看全部」按钮触发 */
all.addEventListener('click', function () { var o = document.getElementById('msAll'); if (o) o.click(); });
}
});
}
})();