悄悄话入口挪进孕妈广场(首页模块底部 + 广场页祈福树下),?wh=1 直开星空页;v26110607
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
|
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
|
||||||
<script src="../js/login-gate.js?v=26110605"></script>
|
<script src="../js/login-gate.js?v=26110607"></script>
|
||||||
<script src="../js/ugc.js?v=26110464" data-guard></script>
|
<script src="../js/ugc.js?v=26110464" data-guard></script>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
|
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
@@ -66,6 +66,31 @@ button{font:inherit;color:inherit;border:0;background:none;padding:0;cursor:poin
|
|||||||
.qf{position:relative;display:block;width:calc(100% - 24px);height:148px;margin:2px 12px 0;border-radius:20px;overflow:hidden;text-align:left;
|
.qf{position:relative;display:block;width:calc(100% - 24px);height:148px;margin:2px 12px 0;border-radius:20px;overflow:hidden;text-align:left;
|
||||||
background:radial-gradient(120% 140% at 82% 100%,#3B3A86 0%,#252A63 38%,#161B3F 75%);box-shadow:0 12px 26px -14px rgba(30,30,90,.7)}
|
background:radial-gradient(120% 140% at 82% 100%,#3B3A86 0%,#252A63 38%,#161B3F 75%);box-shadow:0 12px 26px -14px rgba(30,30,90,.7)}
|
||||||
.qf:active{transform:scale(.985)}
|
.qf:active{transform:scale(.985)}
|
||||||
|
/* 11-07 孕妈悄悄话条(祈福树横幅下面):和首页广场模块底部那条同款夜空细条;点了回首页直接打开星空页(首页 ?wh=1) */
|
||||||
|
.whs{position:relative;display:flex;align-items:center;gap:10px;width:calc(100% - 24px);margin:10px 12px 0;padding:10px 12px 10px 10px;border:0;border-radius:16px;overflow:hidden;text-align:left;font:inherit;color:#fff;
|
||||||
|
background:linear-gradient(100deg,#2A2550 0%,#3E2F5E 60%,#53365F 100%);box-shadow:0 6px 16px -8px rgba(52,36,92,.55)}
|
||||||
|
.whs:active{transform:scale(.985)}
|
||||||
|
.whs-sky{position:absolute;inset:0;pointer-events:none;overflow:hidden}
|
||||||
|
.whs-sky i{position:absolute;width:5px;height:5px;margin:-2.5px 0 0 -2.5px;opacity:.85;filter:drop-shadow(0 0 1.5px rgba(255,255,255,.6));
|
||||||
|
background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 .5C10.9 7.4 12.6 9.1 19.5 10 12.6 10.9 10.9 12.6 10 19.5 9.1 12.6 7.4 10.9.5 10 7.4 9.1 9.1 7.4 10 .5Z' fill='%23FFFFFF'/%3E%3C/svg%3E") center/contain no-repeat;animation:whsTw 2.6s ease-in-out infinite}
|
||||||
|
@keyframes whsTw{0%,100%{opacity:.9;transform:scale(1)}50%{opacity:.2;transform:scale(.55)}}
|
||||||
|
.whs-mt{position:absolute;top:-4px;left:62%;width:96px;height:2px;border-radius:2px;opacity:0;transform-origin:0 50%;
|
||||||
|
background:linear-gradient(90deg,#fff,rgba(255,255,255,.75) 30%,rgba(255,255,255,0));box-shadow:0 0 8px 1px rgba(255,255,255,.8);animation:whsMt 7s linear infinite 1.5s}
|
||||||
|
.whs-mt.m2{left:92%;width:70px;animation-duration:11s;animation-delay:5.2s}
|
||||||
|
@keyframes whsMt{0%{opacity:0;transform:translate(0,0) rotate(-24deg)}1.5%{opacity:1}9%{opacity:0;transform:translate(-150px,68px) rotate(-24deg)}100%{opacity:0;transform:translate(-150px,68px) rotate(-24deg)}}
|
||||||
|
@media (prefers-reduced-motion:reduce){.whs-sky i,.whs-mt{animation:none}}
|
||||||
|
.whs-ico,.whs-tx,.whs-go{position:relative;z-index:1}
|
||||||
|
.whs-ico{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:10px;background:rgba(255,255,255,.12);color:#FFD9A8}
|
||||||
|
.whs-ico svg{width:18px;height:18px}
|
||||||
|
.whs-tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
|
||||||
|
.whs-tx small{font-size:11px;font-weight:600;letter-spacing:1px;color:rgba(255,255,255,.6)}
|
||||||
|
.whs-tp{display:flex;align-items:center;gap:6px;min-width:0}
|
||||||
|
.whs-tp em{flex:none;font-style:normal;font-size:10px;font-weight:800;letter-spacing:.5px;color:#4A2E1E;background:linear-gradient(120deg,#FFE2B8,#FFB98F);padding:1px 6px;border-radius:5px;line-height:15px}
|
||||||
|
.whs-tp b{font-size:15px;font-weight:900;letter-spacing:.5px;color:#FFE7C7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
||||||
|
.whs-rl{font-size:12.5px;font-weight:500;color:rgba(255,244,232,.78);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .26s,transform .26s}
|
||||||
|
.whs-rl.out{opacity:0;transform:translateY(5px)}
|
||||||
|
.whs-go{flex:none;display:flex;align-items:center;gap:2px;font-size:12px;font-weight:700;color:#FFE2B8}
|
||||||
|
.whs-go .ic{width:13px;height:13px}
|
||||||
.qf-st{position:absolute;inset:0;pointer-events:none;opacity:.9;
|
.qf-st{position:absolute;inset:0;pointer-events:none;opacity:.9;
|
||||||
background-image:radial-gradient(1.4px 1.4px at 12% 20%,#fff,transparent),radial-gradient(1px 1px at 28% 70%,#fff,transparent),radial-gradient(1.2px 1.2px at 46% 14%,#FFE9B0,transparent),
|
background-image:radial-gradient(1.4px 1.4px at 12% 20%,#fff,transparent),radial-gradient(1px 1px at 28% 70%,#fff,transparent),radial-gradient(1.2px 1.2px at 46% 14%,#FFE9B0,transparent),
|
||||||
radial-gradient(1px 1px at 54% 82%,#fff,transparent),radial-gradient(1.5px 1.5px at 62% 30%,#fff,transparent),radial-gradient(1px 1px at 8% 88%,#FFE9B0,transparent),radial-gradient(1.2px 1.2px at 40% 46%,#fff,transparent);
|
radial-gradient(1px 1px at 54% 82%,#fff,transparent),radial-gradient(1.5px 1.5px at 62% 30%,#fff,transparent),radial-gradient(1px 1px at 8% 88%,#FFE9B0,transparent),radial-gradient(1.2px 1.2px at 40% 46%,#fff,transparent);
|
||||||
@@ -931,6 +956,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
|||||||
<div id="sheet" role="dialog" aria-modal="true"><i class="sg"></i><div class="sbd" id="sbd"></div></div>
|
<div id="sheet" role="dialog" aria-modal="true"><i class="sg"></i><div class="sbd" id="sbd"></div></div>
|
||||||
<div class="toast" id="toast"></div>
|
<div class="toast" id="toast"></div>
|
||||||
|
|
||||||
|
<script src="../js/wh-themes.js?v=26110607"></script> <!-- 11-07 悄悄话每周话题(与首页共用) -->
|
||||||
<script src="topics.js?v=26110487"></script>
|
<script src="topics.js?v=26110487"></script>
|
||||||
<script src="data.js?v=26110487"></script>
|
<script src="data.js?v=26110487"></script>
|
||||||
<script src="feed.js?v=26110487"></script>
|
<script src="feed.js?v=26110487"></script>
|
||||||
@@ -1172,7 +1198,49 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
|||||||
'<span class="qf-fly" aria-hidden="true"><i>福</i><i>安</i><i>福</i><i>康</i></span>' +
|
'<span class="qf-fly" aria-hidden="true"><i>福</i><i>安</i><i>福</i><i>康</i></span>' +
|
||||||
'<span class="qf-tx"><small><i></i>宝宝祈福树</small><b><i>#</i>为宝宝挂一张福牌<i>#</i></b><em>集齐五福,愿宝宝平平安安</em>' +
|
'<span class="qf-tx"><small><i></i>宝宝祈福树</small><b><i>#</i>为宝宝挂一张福牌<i>#</i></b><em>集齐五福,愿宝宝平平安安</em>' +
|
||||||
'<span class="qf-go">去祈福<svg class="ic"><use href="#i-right"/></svg></span></span></button>';
|
'<span class="qf-go">去祈福<svg class="ic"><use href="#i-right"/></svg></span></span></button>';
|
||||||
|
} /* 11-07 用户:「悄悄话算孕期广场的话题性质」→ 祈福树横幅下面放一条悄悄话夜空细条(同首页广场模块底部那条)。
|
||||||
|
数据同首页:GET /whisper?openid=&week=(孕周取首页写的 mmbox.gcwk.v1);拉不到 / 没孕周 / 已退出登录 → 不显示,不造内容。
|
||||||
|
星空全屏页只在首页有 → 点了回首页带 ?wh=1,首页数据回来自动打开。 */
|
||||||
|
var WHD = null, whRi = 0, whT = null;
|
||||||
|
function whHTML() {
|
||||||
|
if (!WHD) return '';
|
||||||
|
var th = (WHD.theme && WHD.theme.name) ? WHD.theme : (window.MB_WH_THEME ? window.MB_WH_THEME() : null);
|
||||||
|
var l = (WHD.list || []).filter(function (x) { return !x.mine; });
|
||||||
|
var nm = WHD.week ? WHD.week + '周孕妈悄悄话' : '孕妈悄悄话';
|
||||||
|
var sky = [[50,12,6,-1.2,2.4],[60,30,4,-.3,2],[73,15,5,-2.4,2.8],[93,13,4,-3.1,2.2],[21,90,4,-3.7,2.6],[45,88,5,-1.6,3.2],[73,80,4,-2.2,2.6],[89,88,5,-.8,3]]
|
||||||
|
.map(function (k) { return '<i style="left:' + k[0] + '%;top:' + k[1] + '%;width:' + k[2] + 'px;height:' + k[2] + 'px;animation-delay:' + k[3] + 's;animation-duration:' + k[4] + 's"></i>'; }).join('');
|
||||||
|
return '<button type="button" class="whs" id="whsGo" aria-label="打开' + esc(nm) + (th ? ',本周话题:' + esc(th.name) : '') + '">' +
|
||||||
|
'<span class="whs-sky" aria-hidden="true">' + sky + '<b class="whs-mt"></b><b class="whs-mt m2"></b></span>' +
|
||||||
|
'<span class="whs-ico" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M5 18.5V7.8A2.8 2.8 0 017.8 5h8.4A2.8 2.8 0 0119 7.8v5.4a2.8 2.8 0 01-2.8 2.8H9.2z" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linejoin="round"/><path d="M9 10.5h6" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/></svg></span>' +
|
||||||
|
'<span class="whs-tx"><small>' + esc(nm) + '</small>' +
|
||||||
|
(th ? '<span class="whs-tp"><em>本周话题</em><b>' + esc(th.name) + '</b></span>' : '') +
|
||||||
|
'<span class="whs-rl" id="whsRl">' + (l.length ? '“' + esc(l[0].text) + '”' : '') + '</span></span>' +
|
||||||
|
'<span class="whs-go">' + (th ? '去说一句' : '去看看') + '<svg class="ic"><use href="#i-right"/></svg></span></button>';
|
||||||
}
|
}
|
||||||
|
function whRoll() {
|
||||||
|
clearInterval(whT); whRi = 0;
|
||||||
|
var l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : [];
|
||||||
|
if (l.length < 2) return;
|
||||||
|
whT = setInterval(function () {
|
||||||
|
var el = document.getElementById('whsRl'); if (!el || document.hidden) return;
|
||||||
|
whRi = (whRi + 1) % l.length; el.classList.add('out');
|
||||||
|
setTimeout(function () { el.textContent = '“' + l[whRi].text + '”'; el.classList.remove('out'); }, 260);
|
||||||
|
}, 4000);
|
||||||
|
}
|
||||||
|
function whFill() {
|
||||||
|
var slot = document.getElementById('whSlot'); if (!slot) return;
|
||||||
|
slot.innerHTML = whHTML(); whRoll();
|
||||||
|
}
|
||||||
|
(function whFetch() {
|
||||||
|
var g = null; try { g = JSON.parse(localStorage.getItem('mmbox.gcwk.v1') || 'null'); } catch (e) {}
|
||||||
|
var w = g && !g.pp && g.w ? +g.w : 0;
|
||||||
|
if (w < 4 || (window.mbGate && window.mbGate.out)) return;
|
||||||
|
fetch('/api/mp/public/mama-box/whisper?openid=' + encodeURIComponent(OPENID || '') + '&week=' + w)
|
||||||
|
.then(function (r) { return r.ok ? r.json() : null; })
|
||||||
|
.then(function (j) { var r = j && j.code === 200 && j.result; if (r && r.show && (r.list || []).length) { WHD = r; whFill(); } })
|
||||||
|
.catch(function () {});
|
||||||
|
})();
|
||||||
|
|
||||||
/* 分类小 banner:家庭婚姻 / 职场 / 经验 点了 = 参与本类最热话题(投稿规则弹层);测一测 点了 = 进最热的那个测试 */
|
/* 分类小 banner:家庭婚姻 / 职场 / 经验 点了 = 参与本类最热话题(投稿规则弹层);测一测 点了 = 进最热的那个测试 */
|
||||||
var CBN = {
|
var CBN = {
|
||||||
family: ['家庭婚姻', '孕期的家,也需要用心经营', '和老公、婆婆、爸妈的那些事', '我也来聊聊'],
|
family: ['家庭婚姻', '孕期的家,也需要用心经营', '和老公、婆婆、爸妈的那些事', '我也来聊聊'],
|
||||||
@@ -1581,7 +1649,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
|||||||
/* 11-05 用户:「职场那些标签和上面的话题整合到一个里面,感觉有点乱」→ 选方案 A:「全部」下去掉「热门话题」整块,
|
/* 11-05 用户:「职场那些标签和上面的话题整合到一个里面,感觉有点乱」→ 选方案 A:「全部」下去掉「热门话题」整块,
|
||||||
标签作为唯一入口(末尾加「全部话题 ›」);选中标签时标签下露出这一类的 2~3 个热门话题(用户同意);投稿奖励一行挪到「大家在聊」上面。
|
标签作为唯一入口(末尾加「全部话题 ›」);选中标签时标签下露出这一类的 2~3 个热门话题(用户同意);投稿奖励一行挪到「大家在聊」上面。
|
||||||
话题本身不变:投稿选话题、帖子卡上的 #话题#、话题详情页照旧。分类视图(catF)仍是原来的热门话题列表。 */
|
话题本身不变:投稿选话题、帖子卡上的 #话题#、话题详情页照旧。分类视图(catF)仍是原来的热门话题列表。 */
|
||||||
el.innerHTML = qifuHTML() +
|
el.innerHTML = qifuHTML() + '<div id="whSlot">' + whHTML() + '</div>' +
|
||||||
'<div class="rww"><button type="button" class="rwl" data-rule="1"><svg class="ic"><use href="#i-gift"/></svg><span>投稿被选中得 ' + REWARD + '</span><b>怎么参与 ›</b></button></div>';
|
'<div class="rww"><button type="button" class="rwl" data-rule="1"><svg class="ic"><use href="#i-gift"/></svg><span>投稿被选中得 ' + REWARD + '</span><b>怎么参与 ›</b></button></div>';
|
||||||
fh.className = 'shtg';
|
fh.className = 'shtg';
|
||||||
fh.innerHTML = '<div class="sh"><h2>大家在聊</h2><small>孕妈们的分享</small></div>' +
|
fh.innerHTML = '<div class="sh"><h2>大家在聊</h2><small>孕妈们的分享</small></div>' +
|
||||||
@@ -1817,6 +1885,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
|||||||
$('#more').addEventListener('click', function (e) { if (e.target.closest('[data-t]')) { haptic(); selectTopic(''); } });
|
$('#more').addEventListener('click', function (e) { if (e.target.closest('[data-t]')) { haptic(); selectTopic(''); } });
|
||||||
$('#head').addEventListener('click', function (e) {
|
$('#head').addEventListener('click', function (e) {
|
||||||
if (e.target.closest('#qfBanner')) { goQifu(); return; }
|
if (e.target.closest('#qfBanner')) { goQifu(); return; }
|
||||||
|
if (e.target.closest('#whsGo')) { haptic(); var q = new URLSearchParams(location.search); ['t', 'n', 'c'].forEach(function (k) { q.delete(k); }); q.set('wh', '1'); location.href = '../?' + q + location.hash; return; }
|
||||||
var cb = e.target.closest('.cbn[data-test], .csv-i[data-test]'); if (cb) { haptic(); location.href = ceshiURL(cb.dataset.test, true); return; }
|
var cb = e.target.closest('.cbn[data-test], .csv-i[data-test]'); if (cb) { haptic(); location.href = ceshiURL(cb.dataset.test, true); return; }
|
||||||
var dc = e.target.closest('#csvGo'); if (dc) { csdRoll(dc); return; }
|
var dc = e.target.closest('#csvGo'); if (dc) { csdRoll(dc); return; }
|
||||||
var j = e.target.closest('[data-join]'); if (j) { haptic(); openRule(j.dataset.join); return; }
|
var j = e.target.closest('[data-join]'); if (j) { haptic(); openRule(j.dataset.join); return; }
|
||||||
|
|||||||
25
index.html
25
index.html
@@ -9,16 +9,16 @@
|
|||||||
<title>兜爸心选 · 孕育陪伴</title>
|
<title>兜爸心选 · 孕育陪伴</title>
|
||||||
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
|
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
|
||||||
<script src="js/ugc.js?v=26110487"></script>
|
<script src="js/ugc.js?v=26110487"></script>
|
||||||
<!-- V:26110605 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
<!-- V:26110607 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
||||||
<link rel="stylesheet" href="mama-box.css">
|
<link rel="stylesheet" href="mama-box.css">
|
||||||
<link rel="stylesheet" href="night.css?v=26110605">
|
<link rel="stylesheet" href="night.css?v=26110607">
|
||||||
<!-- 11-04 用户:「顶部图片上的倒计时先删除掉」→ 不加载 hero-cd.css / hero-cd.js(文件留着,加回这两行即恢复),头图回到原样式 -->
|
<!-- 11-04 用户:「顶部图片上的倒计时先删除掉」→ 不加载 hero-cd.css / hero-cd.js(文件留着,加回这两行即恢复),头图回到原样式 -->
|
||||||
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
|
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
|
||||||
<script>try{if(localStorage.getItem('mmbox.night.v1')==='1'){document.documentElement.classList.add('night');document.querySelector('meta[name=theme-color]').content='#2A2340'}}catch(e){}</script>
|
<script>try{if(localStorage.getItem('mmbox.night.v1')==='1'){document.documentElement.classList.add('night');document.querySelector('meta[name=theme-color]').content='#2A2340'}}catch(e){}</script>
|
||||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
||||||
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
||||||
<script src="/common/wx-auth.js?v=26102601"></script>
|
<script src="/common/wx-auth.js?v=26102601"></script>
|
||||||
<script src="js/login-gate.js?v=26110605"></script>
|
<script src="js/login-gate.js?v=26110607"></script>
|
||||||
<!-- 11-05 用户:「消消乐的推广 banner 图,不要有外面白色的边框」→ 去掉 .game-promo 外层白底(mama-box.css 里和其他模块共用一条白底规则,这里单独盖掉;夜间同) -->
|
<!-- 11-05 用户:「消消乐的推广 banner 图,不要有外面白色的边框」→ 去掉 .game-promo 外层白底(mama-box.css 里和其他模块共用一条白底规则,这里单独盖掉;夜间同) -->
|
||||||
<style>.game-promo,html.night .game-promo{background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
|
<style>.game-promo,html.night .game-promo{background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
|
||||||
/* 11-05 用户:「消消乐 banner 左右要顶到两边,跟上下模块的距离再缩小几个像素,保持协调一致」→ 去掉外层内边距:左右和其他模块一样贴满(0~屏宽),上下只留模块间统一的 16px 缝(原来多出 8px);圆角跟其他模块一致 26px;同日三改:用户嫌圆角太大 → 16px */
|
/* 11-05 用户:「消消乐 banner 左右要顶到两边,跟上下模块的距离再缩小几个像素,保持协调一致」→ 去掉外层内边距:左右和其他模块一样贴满(0~屏宽),上下只留模块间统一的 16px 缝(原来多出 8px);圆角跟其他模块一致 26px;同日三改:用户嫌圆角太大 → 16px */
|
||||||
@@ -569,13 +569,7 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
|
|||||||
<!-- 2026-10-02 二改(用户:「此刻有一点点乱……悄悄话点进去,前端一个很简洁、轻量化的入口,
|
<!-- 2026-10-02 二改(用户:「此刻有一点点乱……悄悄话点进去,前端一个很简洁、轻量化的入口,
|
||||||
点进去是整个悄悄话的大页面,设计炫酷一点、有创意、视觉有冲击力」):
|
点进去是整个悄悄话的大页面,设计炫酷一点、有创意、视觉有冲击力」):
|
||||||
首页只留一条入口(一句轮播的悄悄话 + 条数),横滑纸条带挪进全屏页 #whPage。 -->
|
首页只留一条入口(一句轮播的悄悄话 + 条数),横滑纸条带挪进全屏页 #whPage。 -->
|
||||||
<button class="wh-entry hide" id="whWall" type="button" aria-label="打开同孕周悄悄话">
|
<!-- 悄悄话入口 #whWall 2026-11-07 挪到孕妈广场模块 #gcHome 底部(用户:「它算孕期广场的话题性质」) -->
|
||||||
<!-- 2026-10-02 用户:「入口那一小条里要有星空,星星一闪一闪,再划过几个流星,不要太多」 -->
|
|
||||||
<span class="we-sky" aria-hidden="true"><i class="tw" style="left:50%;top:12%;width:6px;height:6px;animation-delay:-1.2s;animation-duration:2.4s"></i><i style="left:60%;top:30%;width:4px;height:4px;animation-delay:-0.3s;animation-duration:2.0s"></i><i class="tw" style="left:73%;top:15%;width:5px;height:5px;animation-delay:-2.4s;animation-duration:2.8s"></i><i class="tw" style="left:93%;top:13%;width:4px;height:4px;animation-delay:-3.1s;animation-duration:2.2s"></i><i class="tw" style="left:21%;top:90%;width:4px;height:4px;animation-delay:-3.7s;animation-duration:2.6s"></i><i class="tw" style="left:45%;top:88%;width:5px;height:5px;animation-delay:-1.6s;animation-duration:3.2s"></i><i style="left:73%;top:80%;width:4px;height:4px;animation-delay:-2.2s;animation-duration:2.6s"></i><i class="tw" style="left:89%;top:88%;width:5px;height:5px;animation-delay:-0.8s;animation-duration:3.0s"></i><b class="we-mt"></b><b class="we-mt m2"></b></span>
|
|
||||||
<span class="we-ico" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M5 18.5V7.8A2.8 2.8 0 017.8 5h8.4A2.8 2.8 0 0119 7.8v5.4a2.8 2.8 0 01-2.8 2.8H9.2z" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linejoin="round"/><path d="M9 10.5h6" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/></svg></span>
|
|
||||||
<span class="we-txt"><b id="weName">孕妈悄悄话</b><span class="we-topic"><em>本周话题</em><strong id="weTopic"></strong></span><span class="we-roll" id="weRoll"></span></span>
|
|
||||||
<span class="we-go" id="weGo"></span>
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -618,10 +612,20 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
|
|||||||
</div>
|
</div>
|
||||||
<div class="gch-who"><span class="gch-avs" id="gchAvs" aria-hidden="true"></span><span id="gchCnt"></span></div>
|
<div class="gch-who"><span class="gch-avs" id="gchAvs" aria-hidden="true"></span><span id="gchCnt"></span></div>
|
||||||
<div class="gch-row gb" id="gchRow"></div>
|
<div class="gch-row gb" id="gchRow"></div>
|
||||||
|
<!-- 2026-11-07 用户:悄悄话算广场的话题性质 → 从「此刻」(11-03 起整块藏着)挪进来,放在话题卡下面收尾;
|
||||||
|
跟着 #gcHome 一起受 UGC 总开关管。点开还是原来的星空全屏页 #whPage。 -->
|
||||||
|
<button class="wh-entry hide" id="whWall" type="button" aria-label="打开同孕周悄悄话">
|
||||||
|
<!-- 2026-10-02 用户:「入口那一小条里要有星空,星星一闪一闪,再划过几个流星,不要太多」 -->
|
||||||
|
<span class="we-sky" aria-hidden="true"><i class="tw" style="left:50%;top:12%;width:6px;height:6px;animation-delay:-1.2s;animation-duration:2.4s"></i><i style="left:60%;top:30%;width:4px;height:4px;animation-delay:-0.3s;animation-duration:2.0s"></i><i class="tw" style="left:73%;top:15%;width:5px;height:5px;animation-delay:-2.4s;animation-duration:2.8s"></i><i class="tw" style="left:93%;top:13%;width:4px;height:4px;animation-delay:-3.1s;animation-duration:2.2s"></i><i class="tw" style="left:21%;top:90%;width:4px;height:4px;animation-delay:-3.7s;animation-duration:2.6s"></i><i class="tw" style="left:45%;top:88%;width:5px;height:5px;animation-delay:-1.6s;animation-duration:3.2s"></i><i style="left:73%;top:80%;width:4px;height:4px;animation-delay:-2.2s;animation-duration:2.6s"></i><i class="tw" style="left:89%;top:88%;width:5px;height:5px;animation-delay:-0.8s;animation-duration:3.0s"></i><b class="we-mt"></b><b class="we-mt m2"></b></span>
|
||||||
|
<span class="we-ico" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M5 18.5V7.8A2.8 2.8 0 017.8 5h8.4A2.8 2.8 0 0119 7.8v5.4a2.8 2.8 0 01-2.8 2.8H9.2z" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linejoin="round"/><path d="M9 10.5h6" stroke="currentColor" stroke-width="1.9" stroke-linecap="round"/></svg></span>
|
||||||
|
<span class="we-txt"><b id="weName">孕妈悄悄话</b><span class="we-topic"><em>本周话题</em><strong id="weTopic"></strong></span><span class="we-roll" id="weRoll"></span></span>
|
||||||
|
<span class="we-go" id="weGo"></span>
|
||||||
|
</button>
|
||||||
<style>
|
<style>
|
||||||
#homeBody>section.gc-home{--gt:255,120,150}
|
#homeBody>section.gc-home{--gt:255,120,150}
|
||||||
.gc-home{margin:16px -26px 0;padding:16px 26px 16px;border-radius:26px;position:relative;z-index:0;background-color:#fff}
|
.gc-home{margin:16px -26px 0;padding:16px 26px 16px;border-radius:26px;position:relative;z-index:0;background-color:#fff}
|
||||||
.gc-home.hide{display:none}
|
.gc-home.hide{display:none}
|
||||||
|
#gcHome .wh-entry{margin-top:14px}
|
||||||
.gch-head{display:flex;align-items:center;gap:8px}
|
.gch-head{display:flex;align-items:center;gap:8px}
|
||||||
/* 11-01 第四版:四块分类(家庭/婚姻/职场/母婴)放不进标题行 → 分类单独占第二行,五段等宽 */
|
/* 11-01 第四版:四块分类(家庭/婚姻/职场/母婴)放不进标题行 → 分类单独占第二行,五段等宽 */
|
||||||
.gch-head{flex-wrap:wrap;row-gap:10px}
|
.gch-head{flex-wrap:wrap;row-gap:10px}
|
||||||
@@ -2678,6 +2682,7 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
|
|||||||
<script src="js/zodiac-art.js"></script>
|
<script src="js/zodiac-art.js"></script>
|
||||||
<script src="guangchang/topics.js?v=26110487"></script>
|
<script src="guangchang/topics.js?v=26110487"></script>
|
||||||
<script src="js/ava-pool.js?v=26110487"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
|
<script src="js/ava-pool.js?v=26110487"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
|
||||||
|
<script src="js/wh-themes.js?v=26110607"></script>
|
||||||
<script src="js/app.js"></script>
|
<script src="js/app.js"></script>
|
||||||
<script src="js/kit.js?v=26110605"></script>
|
<script src="js/kit.js?v=26110605"></script>
|
||||||
<!-- 11-05 用户:孕期百问加上跟趣味小测试一样的底部 Tab(孕期百问 / 记一下 / 返回首页)。挂在 #detailQA 里,面板关着时跟着滑出屏外;
|
<!-- 11-05 用户:孕期百问加上跟趣味小测试一样的底部 Tab(孕期百问 / 记一下 / 返回首页)。挂在 #detailQA 里,面板关着时跟着滑出屏外;
|
||||||
|
|||||||
28
js/app.js
28
js/app.js
@@ -3,7 +3,7 @@
|
|||||||
(function () {
|
(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
||||||
var VER = '26110605';
|
var VER = '26110607';
|
||||||
const $ = (s, c) => (c || document).querySelector(s);
|
const $ = (s, c) => (c || document).querySelector(s);
|
||||||
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
||||||
|
|
||||||
@@ -4453,25 +4453,10 @@
|
|||||||
const oid = () => hashParam('openid');
|
const oid = () => hashParam('openid');
|
||||||
const list = () => (data && data.list) || [];
|
const list = () => (data && data.list) || [];
|
||||||
|
|
||||||
/* ---------- 每周话题(2026-10-02 用户:「一周一个主题,要么大家也不知道说什么」)----------
|
/* ---------- 每周话题:表在 js/wh-themes.js(2026-11-07 抽出,孕妈广场也要用)---------- */
|
||||||
一条 = 从 from(北京时间那周的周一)起生效,直到下一条的 from;所以表里永远取「from ≤ 今天」的最后一条,
|
|
||||||
没配新话题时沿用上一周的,不会空着。换话题 = 往表尾追加一条。
|
|
||||||
后端将来若在 /whisper 返回 theme(同结构),以后端为准。
|
|
||||||
presets 只是「不知道说什么?点一句」的示范句,发出去时不在服务端预设库里 → 照常走微信内容安全审核。 */
|
|
||||||
const WH_THEMES = [
|
|
||||||
/* 2026-10-02 用户:本周话题由「对宝宝说的话」改成「对老公说的话」;2026-11-01 用户:改成「对未来宝宝说的话」 */
|
|
||||||
{ from: '2026-09-28', name: '对未来宝宝说的话',
|
|
||||||
tip: '想对还没见面的宝宝说的,悄悄放进星空',
|
|
||||||
say: '对未来宝宝说一句悄悄话', ph: '宝宝,妈妈想跟你说……',
|
|
||||||
presets: ['宝宝,妈妈每天都在等你', '不用多优秀,健康快乐就好', '今天你踢了我好多下,妈妈都记着呢',
|
|
||||||
'等你来了,带你去看海', '谢谢你选中我做你的妈妈', '我们很快就见面啦'] },
|
|
||||||
];
|
|
||||||
function theme() {
|
function theme() {
|
||||||
if (data && data.theme && data.theme.name) return data.theme;
|
if (data && data.theme && data.theme.name) return data.theme;
|
||||||
const d = new Date(Date.now() + 8 * 3600e3).toISOString().slice(0, 10);
|
return window.MB_WH_THEME ? window.MB_WH_THEME() : null;
|
||||||
let t = null;
|
|
||||||
WH_THEMES.forEach(x => { if (x.from <= d) t = x; });
|
|
||||||
return t;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------- 首页入口:一句轮播 ---------- */
|
/* ---------- 首页入口:一句轮播 ---------- */
|
||||||
@@ -4851,9 +4836,16 @@
|
|||||||
if (!page.classList.contains('show')) paintPage();
|
if (!page.classList.contains('show')) paintPage();
|
||||||
}
|
}
|
||||||
show(true);
|
show(true);
|
||||||
|
if (autoOpen) { autoOpen = false; openPage(); }
|
||||||
})
|
})
|
||||||
.catch(() => { if (!silent) show(false); });
|
.catch(() => { if (!silent) show(false); });
|
||||||
}
|
}
|
||||||
|
/* 2026-11-07 孕妈广场页的悄悄话条点了跳回首页带 ?wh=1 → 数据回来直接打开星空页;参数用完就去掉,刷新不再弹 */
|
||||||
|
let autoOpen = /[?&]wh=1(?:&|$)/.test(location.search);
|
||||||
|
if (autoOpen && history.replaceState) {
|
||||||
|
const q = new URLSearchParams(location.search); q.delete('wh');
|
||||||
|
history.replaceState(history.state, '', location.pathname + (q.toString() ? '?' + q : '') + location.hash);
|
||||||
|
}
|
||||||
whLoad = w => load(w, w === wk); /* 同一孕周的重拉(「此刻」每 60 秒一次)按静默刷新走:失败不收入口 */
|
whLoad = w => load(w, w === wk); /* 同一孕周的重拉(「此刻」每 60 秒一次)按静默刷新走:失败不收入口 */
|
||||||
setInterval(() => { if (wk && !document.hidden && !busy) load(wk, true); }, 300000);
|
setInterval(() => { if (wk && !document.hidden && !busy) load(wk, true); }, 300000);
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@
|
|||||||
var REC = ['taidong', 'yunqitizhong', 'yun', 'yunqixuetang', 'gongsuopinlv', 'taierguzhong', 'chanjianrili', 'bushui']
|
var REC = ['taidong', 'yunqitizhong', 'yun', 'yunqixuetang', 'gongsuopinlv', 'taierguzhong', 'chanjianrili', 'bushui']
|
||||||
.map(function (t) { return '#htGrid .tg[data-tool="' + t + '"]'; }).join(',');
|
.map(function (t) { return '#htGrid .tg[data-tool="' + t + '"]'; }).join(',');
|
||||||
var SEL = {
|
var SEL = {
|
||||||
home: REC + ',#vitals .vt-it,.tab-fab,.fab,.fab-w,#htEdit,.tg-add,#homeExchMod,#meExchCard,#meExchGo,#meExchOrders,#bbBanner,[data-modal="modalProfile"],[data-modal="modalWhisper"],#bfMe,.preg-card',
|
home: REC + ',#vitals .vt-it,.tab-fab,.fab,.fab-w,#htEdit,.tg-add,#homeExchMod,#meExchCard,#meExchGo,#meExchOrders,#bbBanner,[data-modal="modalProfile"],[data-modal="modalWhisper"],#bfMe,.preg-card,#whSay,[data-hug]',
|
||||||
plaza: '#blk,#bfv,#csend,#cpic,#cemo,#cpOk,[data-like],[data-cl],[data-rk],#cmgo,[data-write],[data-mywrite],#tabRec',
|
plaza: '#blk,#bfv,#csend,#cpic,#cemo,#cpOk,[data-like],[data-cl],[data-rk],#cmgo,[data-write],[data-mywrite],#tabRec',
|
||||||
topic: '.tc-lk,.tc-go,.tc-in .pic-b,.tc-in .emo-b'
|
topic: '.tc-lk,.tc-go,.tc-in .pic-b,.tc-in .emo-b'
|
||||||
};
|
};
|
||||||
|
|||||||
17
js/wh-themes.js
Normal file
17
js/wh-themes.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/* 孕妈悄悄话 · 每周话题表(2026-11-07 从 app.js 抽出来,首页和孕妈广场共用)。
|
||||||
|
一条 = 从 from(北京时间那周的周一)起生效,直到下一条的 from;取「from ≤ 今天」的最后一条,没配新话题时沿用上一周的。
|
||||||
|
换话题 = 往表尾追加一条。后端将来若在 /whisper 返回 theme(同结构),以后端为准。
|
||||||
|
presets 只是「不知道说什么?点一句」的示范句,发出去照常走微信内容安全审核。 */
|
||||||
|
window.MB_WH_THEMES = [
|
||||||
|
/* 2026-10-02 用户:本周话题由「对宝宝说的话」改成「对老公说的话」;2026-11-01 用户:改成「对未来宝宝说的话」 */
|
||||||
|
{ from: '2026-09-28', name: '对未来宝宝说的话',
|
||||||
|
tip: '想对还没见面的宝宝说的,悄悄放进星空',
|
||||||
|
say: '对未来宝宝说一句悄悄话', ph: '宝宝,妈妈想跟你说……',
|
||||||
|
presets: ['宝宝,妈妈每天都在等你', '不用多优秀,健康快乐就好', '今天你踢了我好多下,妈妈都记着呢',
|
||||||
|
'等你来了,带你去看海', '谢谢你选中我做你的妈妈', '我们很快就见面啦'] },
|
||||||
|
];
|
||||||
|
window.MB_WH_THEME = function () {
|
||||||
|
var d = new Date(Date.now() + 8 * 3600e3).toISOString().slice(0, 10), t = null;
|
||||||
|
window.MB_WH_THEMES.forEach(function (x) { if (x.from <= d) t = x; });
|
||||||
|
return t;
|
||||||
|
};
|
||||||
@@ -1102,9 +1102,6 @@ html.night .wsk-done button{color:#fff;background:rgba(255,255,255,.12);box-shad
|
|||||||
html.night .wmt-l::before{background:linear-gradient(90deg,#2D2730 0,rgba(45,39,48,0.7) 8%,rgba(45,39,48,0.32) 22%,rgba(35,29,45,0.22) 55%,rgba(255,255,255,.06) 90%,transparent)}
|
html.night .wmt-l::before{background:linear-gradient(90deg,#2D2730 0,rgba(45,39,48,0.7) 8%,rgba(45,39,48,0.32) 22%,rgba(35,29,45,0.22) 55%,rgba(255,255,255,.06) 90%,transparent)}
|
||||||
html.night .wmt.mine .wmt-l::before{background:linear-gradient(90deg,#2F291E 0,rgba(36,32,23,0.7) 8%,rgba(36,31,23,0.32) 22%,rgba(255,210,150,.22) 55%,rgba(255,220,170,.06) 90%,transparent)}
|
html.night .wmt.mine .wmt-l::before{background:linear-gradient(90deg,#2F291E 0,rgba(36,32,23,0.7) 8%,rgba(36,31,23,0.32) 22%,rgba(255,210,150,.22) 55%,rgba(255,220,170,.06) 90%,transparent)}
|
||||||
html.night .we-sky i{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cdefs%3E%3CradialGradient id='g'%3E%3Cstop offset='0' stop-color='%23FFF4E6' stop-opacity='.85'/%3E%3Cstop offset='1' stop-color='%23FFF4E6' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Ccircle cx='10' cy='10' r='10' fill='url(%23g)' opacity='.45'/%3E%3Cpath d='M10 .5C10.9 7.4 12.6 9.1 19.5 10 12.6 10.9 10.9 12.6 10 19.5 9.1 12.6 7.4 10.9.5 10 7.4 9.1 9.1 7.4 10 .5Z' fill='%23FFFFFF'/%3E%3C/svg%3E") center/contain no-repeat}
|
html.night .we-sky i{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cdefs%3E%3CradialGradient id='g'%3E%3Cstop offset='0' stop-color='%23FFF4E6' stop-opacity='.85'/%3E%3Cstop offset='1' stop-color='%23FFF4E6' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Ccircle cx='10' cy='10' r='10' fill='url(%23g)' opacity='.45'/%3E%3Cpath d='M10 .5C10.9 7.4 12.6 9.1 19.5 10 12.6 10.9 10.9 12.6 10 19.5 9.1 12.6 7.4 10.9.5 10 7.4 9.1 9.1 7.4 10 .5Z' fill='%23FFFFFF'/%3E%3C/svg%3E") center/contain no-repeat}
|
||||||
html.night .we-mt{background:linear-gradient(90deg,#2D2730,rgba(45,39,48,0.5) 30%,rgba(255,255,255,0));box-shadow:0 0 6px rgba(45,39,48,0.7)}
|
|
||||||
html.night .we-mt::before{background:#2D2730;box-shadow:0 0 6px 2px #2D2730}
|
|
||||||
html.night .we-mt{background:linear-gradient(90deg,#2D2730,rgba(45,39,48,0.75) 30%,rgba(255,255,255,0));box-shadow:0 0 8px 1px rgba(45,39,48,0.8)}
|
|
||||||
html.night .sk-today .sk-go{color:#fff;background:linear-gradient(135deg,#F09A80,#E07560);box-shadow:0 4px 10px rgba(224,117,96,.28)}
|
html.night .sk-today .sk-go{color:#fff;background:linear-gradient(135deg,#F09A80,#E07560);box-shadow:0 4px 10px rgba(224,117,96,.28)}
|
||||||
html.night .modal:not(.show),html.night .sheet:not(.show){box-shadow:none!important}
|
html.night .modal:not(.show),html.night .sheet:not(.show){box-shadow:none!important}
|
||||||
html.night .pl-feed3 .pl-row .pr-ava{box-shadow:0 0 0 1.5px #2D2730}
|
html.night .pl-feed3 .pl-row .pr-ava{box-shadow:0 0 0 1.5px #2D2730}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
/* 11-04 微信转发图:每个专题一张 assets/share/t/<slug>.jpg(核心词大字 + logo),见 js/share-card.js */
|
/* 11-04 微信转发图:每个专题一张 assets/share/t/<slug>.jpg(核心词大字 + logo),见 js/share-card.js */
|
||||||
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110464'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
|
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110464'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
|
||||||
/* 11-07 退出登录后只看不写(js/login-gate.js):点赞、评论、发图都弹「登录后才能使用」 */
|
/* 11-07 退出登录后只看不写(js/login-gate.js):点赞、评论、发图都弹「登录后才能使用」 */
|
||||||
if (!window.mbGate) (function () { var s = document.createElement('script'); s.src = '../../js/login-gate.js?v=26110605'; document.head.appendChild(s); })();
|
if (!window.mbGate) (function () { var s = document.createElement('script'); s.src = '../../js/login-gate.js?v=26110607'; document.head.appendChild(s); })();
|
||||||
var SK = 'mmbox.tp.v1', UK = (function () { var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&]*)/); return m ? decodeURIComponent(m[1]) : '_guest'; })();
|
var SK = 'mmbox.tp.v1', UK = (function () { var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&]*)/); return m ? decodeURIComponent(m[1]) : '_guest'; })();
|
||||||
function loadMe() { try { var a = JSON.parse(localStorage.getItem(SK) || '{}') || {}; var m = a[UK] || {}; m.cm = m.cm || {}; m.lk = m.lk || {}; return { a: a, m: m }; } catch (e) { return { a: {}, m: { cm: {}, lk: {} } }; } }
|
function loadMe() { try { var a = JSON.parse(localStorage.getItem(SK) || '{}') || {}; var m = a[UK] || {}; m.cm = m.cm || {}; m.lk = m.lk || {}; return { a: a, m: m }; } catch (e) { return { a: {}, m: { cm: {}, lk: {} } }; } }
|
||||||
function saveMe(st) { try { st.a[UK] = st.m; localStorage.setItem(SK, JSON.stringify(st.a)); } catch (e) {} }
|
function saveMe(st) { try { st.a[UK] = st.m; localStorage.setItem(SK, JSON.stringify(st.a)); } catch (e) {} }
|
||||||
|
|||||||
Reference in New Issue
Block a user