头像按模块分配互不重复:js/ava-pool.js(375 个装饰头像分 12 段),评论区让出这些人设改同类替补(v26110440)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-05 01:01:18 +00:00
parent 72fcdaeea5
commit 20613191f5
125 changed files with 243 additions and 220 deletions

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110439';
var VER = '26110440';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
@@ -4199,11 +4199,12 @@
妈妈近脸从 22 张砍到 14 张(去掉最像的几张),优先半身 / 户外 / 孕肚(m18~m22),每 3 个里最多 1 张妈妈脸;
两池仍不相交:AVA_TOP 18 张、AVA_FEED 29 张。同日额度充上后补 14 张 p01~p14(孕妇全身、夫妻合照、一家三口、生活场景),
两池各约 1/3 是 p*,妈妈近脸 m* 退到一半以下;AVA_TOP 23 张、AVA_FEED 37 张,仍不相交。 */
const AVA_TOP = ['p01', 'k01', 's02', 'm20', 'p02', 'mom-03', 'k04', 'p03', 's05', 'baby-02', 'm13', 'p04', 'k06', 's09', 'p05', 'mom-11', 'k10', 'p06', 'm21', 's10', 'p07', 'baby-06', 'k12'];
const AVA_FEED = ['p08', 'k02', 's01', 'm01', 'p09', 'k03', 'mom-05', 'p10', 's03', 'm18', 'k05', 'p11', 's04', 'baby-04', 'm22', 'p12', 'k07', 's06', 'mom-08', 'p13', 'm03', 'k08', 's07', 'p14', 'm19', 'k09', 's08', 'mom-14', 'm09', 'k11', 'baby-09', 'm11', 'k13', 'mom-17', 'm14', 'm15', 'm17'];
/* 11-05 用户:各模块头像不要互相重复 → 改读 js/ava-pool.js 的分配表(pulseTop / pulseFeed),下面两行原表只作加载失败兜底 */
const AVA_TOP = (window.MB_AVA && MB_AVA.S.pulseTop) || ['p01', 'k01', 's02', 'm20', 'p02', 'mom-03', 'k04', 'p03', 's05', 'baby-02', 'm13', 'p04', 'k06', 's09', 'p05', 'mom-11', 'k10', 'p06', 'm21', 's10', 'p07', 'baby-06', 'k12'];
const AVA_FEED = (window.MB_AVA && MB_AVA.S.pulseFeed) || ['p08', 'k02', 's01', 'm01', 'p09', 'k03', 'mom-05', 'p10', 's03', 'm18', 'k05', 'p11', 's04', 'baby-04', 'm22', 'p12', 'k07', 's06', 'mom-08', 'p13', 'm03', 'k08', 's07', 'p14', 'm19', 'k09', 's08', 'mom-14', 'm09', 'k11', 'baby-09', 'm11', 'k13', 'mom-17', 'm14', 'm15', 'm17'];
/* mom-* / baby-* 取自统一头像库 /_bridge/avatars/(2026-10-11 用户:「可以适当调几个我库里预存的头像,妈妈和宝宝的」);
其余仍是 assets/img/mom/ 下的写实照片。库头像是 256px 透明底 PNG,底色由 .pr-ava / .pp-avs i 的 #FFE3D3 托住。 */
const avaSrc = n => /^(mom|baby)-\d+$/.test(n) ? 'https://mp.yizhezhe.com/_bridge/avatars/' + n + '.png' : 'assets/img/mom/' + n + '.jpg';
const avaSrc = n => /:|^\//.test(n) && window.MB_AVA ? MB_AVA.src(n, '') : /^(mom|baby)-\d+$/.test(n) ? 'https://mp.yizhezhe.com/_bridge/avatars/' + n + '.png' : 'assets/img/mom/' + n + '.jpg';
const avaImg = n => '<img src="' + avaSrc(n) + '" alt="" loading="lazy" decoding="async" width="48" height="48">';
const strSeed = t => { let x = 7; for (let i = 0; i < t.length; i++) x = (x * 31 + t.charCodeAt(i)) | 0; return Math.abs(x); };
/* ================= 孕妈广场 · 首页入口(2026-11-01 第一版,占位内容) =================
@@ -4235,7 +4236,7 @@
一块可横滑的地面,话题是一个个说话气泡、气泡下站着一位妈妈的头像,一高一低「之」字形排开、轻轻浮动;
背景一条虚线小路从每个头像脚下穿过,空地上零星散着几个在逛的小头像。隔一个气泡带照片(topics.js 的 ph);「全部」里都是热门,不再逐个挂「热」。 */
const CAT_CN = { family: '家庭婚姻', work: '职场', baby: '经验' };
const POOL = AVA_FEED.concat(AVA_TOP).filter(n => /^(p|m|mom-)\d/.test(n)); // 只用妈妈头像,k/s/baby 是孩子和风景
const POOL = (window.MB_AVA && MB_AVA.S.gbWalk) || AVA_FEED.concat(AVA_TOP).filter(n => /^(p|m|mom-)\d/.test(n)); // 11-05 改用分配表 gbWalk(不和「此刻」撞)
function bubble(t, i, allHot) {
const ph = i % 2 === 0 && t.ph;
return '<button type="button" class="gb-b' + (ph ? ' ph' : '') + (t.hot ? ' hot' : '') + '" data-t="' + esc(t.id) + '" style="--c1:' + t.c[0] + ';--c2:' + t.c[1] + ';--ink:' + t.ink + ';--d:' + (i % 5) * -.8 + 's">' +
@@ -5552,7 +5553,7 @@
if (!QA) loadQA().then(q => { if (q.length) renderSearch(wk, today, size); });
$('#msWk').textContent = '孕 ' + W + ' 周';
$('#msCnt').textContent = '孕 ' + W + ' 周的妈妈都在看';
const pool = AVA_TOP.concat(AVA_FEED), s0 = (W * 7) % pool.length;
const pool = (window.MB_AVA && MB_AVA.S.search) || AVA_TOP.concat(AVA_FEED), s0 = (W * 7) % pool.length; // 11-05 分配表 search
$('#msAvs').innerHTML = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(i => avaImg(pool[(s0 + i * 3) % pool.length])).join('');
const bank = QA || [];
let items;
@@ -5608,8 +5609,8 @@
const wan = n => n >= 1e4 ? (Math.round(n / 1e3) / 10) + '万' : String(Math.round(n));
$('#qaHeroW').textContent = band ? '孕 ' + state.week + ' 周' : '大家都在问';
$('#qaHeroT').textContent = '孕妈最常问的问题';
const s0 = ((state.week || 1) * 5) % AVA_TOP.length;
$('#qaHeroD').innerHTML = '<span class="qa-avs">' + [0, 1, 2, 3, 4].map(i => avaImg(AVA_TOP[(s0 + i * 2) % AVA_TOP.length])).join('') + '</span>' + wan(tot * 0.62) + ' 孕妈在这找答案';
const QH = (window.MB_AVA && MB_AVA.S.qaHero) || AVA_TOP, s0 = ((state.week || 1) * 5) % QH.length; // 11-05 分配表 qaHero
$('#qaHeroD').innerHTML = '<span class="qa-avs">' + [0, 1, 2, 3, 4].map(i => avaImg(QH[(s0 + i * 2) % QH.length])).join('') + '</span>' + wan(tot * 0.62) + ' 孕妈在这找答案';
const QA_BD = i => i < 1 ? ['爆', 'bao'] : i < 7 ? ['热', 're'] : i < 10 ? ['新', 'xin'] : null;
const QA_EM = { 身体: '🤰', 准备: '📋', 产检: '🩺', 宝宝: '👶', 生活: '🏠', 营养: '🥗', 职场: '💼', 花钱: '💰', 心情: '💗', 趣味: '🎈', 补剂: '💊', 专题: '📌' };
const QA_KW = {