From aee73715354c4864f3a7e76182a2805eea79d9df Mon Sep 17 00:00:00 2001 From: deploy Date: Sat, 7 Nov 2026 01:52:11 +0000 Subject: [PATCH] =?UTF-8?q?=E6=82=84=E6=82=84=E8=AF=9D=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=B9=BF=E5=9C=BA=E4=BF=A1=E6=81=AF=E6=B5=81=E7=BD=AE=E9=A1=B6?= =?UTF-8?q?=E7=AC=94=E8=AE=B0=EF=BC=88=E9=A6=96=E9=A1=B5=E4=B8=8D=E6=94=BE?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=3Fwh=3D1=20=E7=9B=B4=E6=8E=A5=E7=9B=96?= =?UTF-8?q?=E4=B8=8A=E6=98=9F=E7=A9=BA=E9=A1=B5=E3=80=81=E5=85=B3=E6=8E=89?= =?UTF-8?q?=E5=9B=9E=E5=B9=BF=E5=9C=BA=EF=BC=9Bv26110608?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- guangchang/index.html | 122 ++++++++++++++++++++--------------------- index.html | 28 ++++------ js/app.js | 34 +++++++++--- js/gch/v4.js | 2 - js/gch/v6.css | 4 -- js/gch/v6.js | 3 +- topic/_shared/tools.js | 2 +- 7 files changed, 98 insertions(+), 97 deletions(-) diff --git a/guangchang/index.html b/guangchang/index.html index 3df999f..26e67b9 100644 --- a/guangchang/index.html +++ b/guangchang/index.html @@ -3,7 +3,7 @@ - + @@ -66,31 +66,30 @@ 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; 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)} -/* 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} +/* 11-07 置顶笔记「孕妈悄悄话」(用户:首页不放,在广场内容里发一条置顶笔记,点了进星空页): + 右列第一张,样子是一张笔记卡 —— 封面换成夜空(星星一闪一闪 + 偶尔一道流星)+ 本周话题大字 + 一句轮播的悄悄话 */ +.nc.pin .pcv{position:relative;height:calc(var(--cw, 175px) * 1.25);overflow:hidden;color:#fff; + background:radial-gradient(120% 70% at 85% 0%,#5A3B72 0%,transparent 60%),radial-gradient(90% 60% at 0% 100%,#4A2C55 0%,transparent 70%),linear-gradient(180deg,#191634 0%,#241D44 55%,#2F2148 100%)} +.pcv .psk{position:absolute;inset:0;pointer-events:none} +.pcv .psk i{position:absolute;width:6px;height:6px;margin:-3px 0 0 -3px;opacity:.85;filter:drop-shadow(0 0 2px rgba(255,255,255,.7)); + 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:pTw 2.6s ease-in-out infinite} +.pcv .psk i.b{width:11px;height:11px;margin:-5.5px 0 0 -5.5px;opacity:1;filter:drop-shadow(0 0 4px rgba(255,255,255,.9))} +@keyframes pTw{0%,100%{opacity:.9;transform:scale(1)}50%{opacity:.2;transform:scale(.55)}} +.pcv .pmt{position:absolute;top:8%;left:78%;width:80px;height:2px;border-radius:2px;opacity:0;transform-origin:0 50%; + background:linear-gradient(90deg,#fff,rgba(255,255,255,.7) 30%,rgba(255,255,255,0));box-shadow:0 0 8px 1px rgba(255,255,255,.8);animation:pMt 6s linear infinite 1.2s} +.pcv .pmt::before{content:"";position:absolute;left:-2px;top:-1.5px;width:5px;height:5px;border-radius:50%;background:#fff;box-shadow:0 0 6px 2px #fff} +.pcv .pmt.m2{top:30%;left:96%;width:60px;animation-duration:9s;animation-delay:4.2s} +@keyframes pMt{0%{opacity:0;transform:translate(0,0) rotate(-28deg)}2%{opacity:1}12%{opacity:0;transform:translate(-130px,70px) rotate(-28deg)}100%{opacity:0;transform:translate(-130px,70px) rotate(-28deg)}} +@media (prefers-reduced-motion:reduce){.pcv .psk i,.pcv .pmt{animation:none}} +.pcv .ptop{position:absolute;left:8px;top:8px;z-index:1;height:19px;padding:0 7px;border-radius:6px;background:linear-gradient(120deg,#FFE2B8,#FFB98F);color:#4A2E1E;font-size:10.5px;font-style:normal;font-weight:900;line-height:19px;letter-spacing:.5px} +.pcv .pbig{position:absolute;left:12px;right:12px;bottom:40px;z-index:1} +.pcv .pbig small{display:block;font-size:10.5px;font-weight:700;letter-spacing:1px;color:rgba(255,231,199,.75)} +.pcv .pbig b{display:block;margin-top:4px;font-size:19px;font-weight:900;line-height:1.3;letter-spacing:.5px;color:#FFE7C7;text-shadow:0 2px 10px rgba(20,10,40,.6)} +.pcv .pq{position:absolute;left:12px;right:12px;bottom:12px;z-index:1;margin:0;font-size:11.5px;color:rgba(255,244,232,.8);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .26s,transform .26s} +.pcv .pq.out{opacity:0;transform:translateY(5px)} +.nb .ntg.k-whs{background:#F0EBFA;color:#7A5BB8} +.nc.pin .nf .pav{flex:none;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:linear-gradient(135deg,#3E2F5E,#6B4AA8);color:#FFE2B8;font-size:10px;font-style:normal} +.nc.pin .nf .pgo{margin-left:auto;flex:none;font-size:11px;font-weight:800;color:#7A5BB8} .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), 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); @@ -956,7 +955,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
- + @@ -1198,48 +1197,40 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} '' + '宝宝祈福树#为宝宝挂一张福牌#集齐五福,愿宝宝平平安安' + '去祈福'; - } /* 11-07 用户:「悄悄话算孕期广场的话题性质」→ 祈福树横幅下面放一条悄悄话夜空细条(同首页广场模块底部那条)。 - 数据同首页:GET /whisper?openid=&week=(孕周取首页写的 mmbox.gcwk.v1);拉不到 / 没孕周 / 已退出登录 → 不显示,不造内容。 - 星空全屏页只在首页有 → 点了回首页带 ?wh=1,首页数据回来自动打开。 */ + } /* 11-07 用户:「首页就不放了,在内容页里放,发一个笔记置顶,点击就进到这个页面」→ 「全部」信息流右列第一张置顶笔记卡。 + 有孕周(首页写的 mmbox.gcwk.v1,≥4 周、没生)且没退出登录才出;数据同首页 GET /whisper?openid=&week=,回来后卡里轮播真实的悄悄话, + 拉不到就只显示话题,不造内容。星空全屏页在首页 → 点了跳首页带 ?wh=1,首页直接打开星空页,关掉回到这里。 */ + var PIN_WK = (function () { try { var g = JSON.parse(localStorage.getItem('mmbox.gcwk.v1') || 'null'); return g && !g.pp && g.w ? +g.w : 0; } catch (e) { return 0; } })(); + var PIN_ON = PIN_WK >= 4 && !(window.mbGate && window.mbGate.out); 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 ''; }).join(''); - return ''; + function pinHTML() { + var th = (WHD && WHD.theme && WHD.theme.name) ? WHD.theme : (window.MB_WH_THEME ? window.MB_WH_THEME() : null); + var l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : []; + var sky = [[14,14,0,-1.2,2.4],[38,8,0,-.3,2],[62,20,1,-2.4,2.8],[86,12,0,-3.1,2.2],[24,34,1,-3.7,2.6],[50,40,0,-1.6,3.2],[80,32,0,-2.2,2.6],[10,52,0,-.8,3],[70,50,1,-1.9,2.4],[90,58,0,-2.8,3]] + .map(function (k) { return ''; }).join(''); + return ''; } function whRoll() { clearInterval(whT); whRi = 0; - var l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : []; + var el = document.getElementById('pinRl'), l = WHD ? (WHD.list || []).filter(function (x) { return !x.mine; }) : []; + if (!el || !l.length) return; + el.textContent = '“' + l[0].text + '”'; 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); + var e2 = document.getElementById('pinRl'); if (!e2) { clearInterval(whT); return; } if (document.hidden) return; + whRi = (whRi + 1) % l.length; e2.classList.add('out'); + setTimeout(function () { e2.textContent = '“' + l[whRi].text + '”'; e2.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 () {}); - })(); + if (PIN_ON) fetch('/api/mp/public/mama-box/whisper?openid=' + encodeURIComponent(OPENID || '') + '&week=' + PIN_WK) + .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; whRoll(); } }) + .catch(function () {}); /* 分类小 banner:家庭婚姻 / 职场 / 经验 点了 = 参与本类最热话题(投稿规则弹层);测一测 点了 = 进最热的那个测试 */ var CBN = { @@ -1649,7 +1640,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} /* 11-05 用户:「职场那些标签和上面的话题整合到一个里面,感觉有点乱」→ 选方案 A:「全部」下去掉「热门话题」整块, 标签作为唯一入口(末尾加「全部话题 ›」);选中标签时标签下露出这一类的 2~3 个热门话题(用户同意);投稿奖励一行挪到「大家在聊」上面。 话题本身不变:投稿选话题、帖子卡上的 #话题#、话题详情页照旧。分类视图(catF)仍是原来的热门话题列表。 */ - el.innerHTML = qifuHTML() + '
' + whHTML() + '
' + + el.innerHTML = qifuHTML() + '
'; fh.className = 'shtg'; fh.innerHTML = '

大家在聊

孕妈们的分享
' + @@ -1728,7 +1719,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} 11-03 用户:「笔记里测一测减少一些,已经有测一测模块了」→ 原来第 3 位起每 8 张插 1 张(约 20 张),改成第 6 位起每 30 张插 1 张、最多 3 张 */ var csq = CS_MIX.concat(byHot(TM).map(function (x) { return x.id; }).filter(function (id) { return CS_MIX.indexOf(id) < 0; })); list.forEach(function (n, k) { if (k >= 6 && (k - 6) % 30 === 0 && ci < 3) { var tid = csq[ci++ % csq.length]; if (TMBY[tid]) mixed.push({ test: TMBY[tid] }); } mixed.push(n); }); - list = [{ mine: 1 }].concat(mixed); + list = [{ mine: 1 }].concat(PIN_ON ? [{ pin: 1 }] : [], mixed); /* 11-07 置顶笔记「孕妈悄悄话」 */ } /* 11-03 用户:切分类有点卡。原来每张卡塞进列里再 offsetHeight 量高,每量一次整页重排;85 张卡在中端机上卡 0.5 秒以上,正好卡在滑入动画中间。 现在:帖子卡高度直接算(封面 = 列宽 × 比例,底部 = 标题 1/2 行 + 作者行,和 .nc 样式对应),只有「我的投稿 / 收藏 / 测试卡」这几种 @@ -1740,6 +1731,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} list.forEach(function (n) { if (n.mine) specials.push(myCardHTML(), favCardHTML()); else if (n.test) specials.push(testCardHTML(n.test, dn)); + else if (n.pin) specials.push(pinHTML()); }); var spH = []; if (specials.length) { @@ -1754,6 +1746,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} function add(html, c, h) { out[c].push(anim(html, k2++)); hs[c] += h + 8; } list.forEach(function (n) { if (n.mine) { add(specials[si], 0, spH[si++]); add(specials[si], 0, spH[si++]); return; } + if (n.pin) { add(specials[si], 1, spH[si++]); lastTx[1] = false; return; } /* 右列第一张 */ if (n.test) { var tc0 = hs[0] <= hs[1] ? 0 : 1; add(specials[si], tc0, spH[si++]); lastTx[tc0] = false; return; } nk++; var c = hs[0] <= hs[1] ? 0 : 1, sty = !lastTx[c] && n.photo ? (txN[c]++ % 2 ? 'tg' : 'ov') : ''; @@ -1761,6 +1754,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} var r = n.ratio; if (n.photo && sty === 'ov') r = Math.max(r, 1.33); else if (n.photo && sty === 'tg') r = Math.max(r, 1.2); add(cardHTML(n, !cur, sty), c, estH(n, r)); }); + if (PIN_ON) setTimeout(whRoll, 0); var FIRST = 14, gen = renderFeed.gen = (renderFeed.gen || 0) + 1; cols[0].innerHTML = out[0].slice(0, FIRST).join(''); cols[1].innerHTML = out[1].slice(0, FIRST).join(''); if (out[0].length > FIRST || out[1].length > FIRST) setTimeout(function () { @@ -1885,7 +1879,6 @@ 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(''); } }); $('#head').addEventListener('click', function (e) { 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 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; } @@ -1955,6 +1948,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff} }, true); $('#wf').addEventListener('click', function (e) { if (e.target.closest('[data-mine]')) { haptic(); location.href = mineURL(); return; } + if (e.target.closest('#whPin')) { 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; } if (e.target.closest('[data-fav]')) { haptic(); openFav(false); return; } var ts = e.target.closest('[data-test]'); if (ts) { haptic(); location.href = ceshiURL(ts.dataset.test, catF === 'ceshi'); return; } diff --git a/index.html b/index.html index db026de..9452d74 100644 --- a/index.html +++ b/index.html @@ -9,16 +9,16 @@ 兜爸心选 · 孕育陪伴 - + - + - +