首页宝宝踢:15~25 秒一次、20 周起以小脚为主、力度加大、脚印更明显(v26110644)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-07 10:12:39 +00:00
parent 9063e52e10
commit fa3ba191f2
3 changed files with 17 additions and 13 deletions

View File

@@ -9,7 +9,7 @@
<title>兜爸心选 · 孕育陪伴</title>
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
<script src="js/ugc.js?v=26110702"></script>
<!-- V:26110643 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<!-- V:26110644 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
<link rel="stylesheet" href="mama-box.css">
<link rel="stylesheet" href="night.css?v=26110608">
<link rel="stylesheet" href="js/wh-cm.css?v=26110642">
@@ -2732,7 +2732,7 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
})();
</script>
<!-- 2026-10-03 首页彩蛋:宝宝在肚皮底下动(独立文件,删掉这一行即整体下线;开关在「隐私权限」) -->
<script src="js/bump.js?v=26110487"></script>
<script src="js/bump.js?v=26110644"></script>
<!-- 2026-10-04 首页头图:按孕周换宝宝 + 阳光水波(独立文件) -->
<script src="js/hero-fx.js"></script>
<!-- 2026-10-05 首页头图:宝宝时不时动一动小手小脚(独立文件,删掉这一行即下线) -->

View File

@@ -3,7 +3,7 @@
(function () {
'use strict';
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
var VER = '26110643';
var VER = '26110644';
const $ = (s, c) => (c || document).querySelector(s);
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));

View File

@@ -25,6 +25,7 @@
· 20~25 周「小鱼吐泡泡」:小、浅、一闪就没,常常连着两下;隔 10~25 秒才一次,周数越小越稀;滑过来也不追
· 26~33 周「拳打脚踢」:完整版——小脚丫 / 小拳头 / 膝盖 / 小屁股,中途还会再顶一下(11-05 用户:间隔改为 14~25 秒,原 4~8 秒)
· 34 周起「地方小了」:很少猛踢,多是一大片慢慢拱过去(翻身、屁股),节奏放慢(11-05 用户:间隔改为 14~25 秒,原 7~12 秒)
11-07 用户:「改成 15~25 秒一次,20 周之后都踢,力度大一点,能看出小脚印」→ 间隔统一 15~25 秒;三个阶段都以小脚丫为主(约 2/3),脚 amp 9.5→13,脚印加深放大。
孕周来自 app.js 的 mb-preg 事件(syncPregnancy 跑完后广播)。调试:URL 带 bumpweek=24 可强制按 24 周演示。
· 节奏(26 周起):有时原地「哒哒哒」带节奏连踢几拍;有时踢完不歇,旁边紧接着再踢 1~2 下
开关:「我的 → 隐私权限 → 宝宝在肚皮下动」,存 localStorage 'mb_bump'('0' = 关);系统开了「减弱动态效果」也不出来。 */
@@ -63,7 +64,7 @@
/* ---------- 宝宝的各个部位:形状不同,动法不同(形状参数和 demo/bump 一致,脚趾去掉了;真实页面上停留时间加长到 3~5 秒,留够看见再伸手的时间) ---------- */
const PARTS = {
foot: { rx: 60, ry: 68, sharp: 2.5, amp: 9.5, dur: [3.6, 4.6] },
foot: { rx: 60, ry: 68, sharp: 2.5, amp: 13, dur: [3.6, 4.6] }, // 11-07 用户:「力度大一点,能看出小脚印」→ amp 9.5 → 13
fist: { rx: 44, ry: 44, sharp: 2.7, amp: 8, dur: [3, 3.8] },
knee: { rx: 48, ry: 80, sharp: 2.3, amp: 8.5, dur: [3.4, 4.2] },
butt: { rx: 92, ry: 78, sharp: 1.25, amp: 7, dur: [4, 5], roll: true },
@@ -83,10 +84,11 @@
/* ---------- 孕周 → 阶段 ---------- */
const STAGES = {
// drum:原地带节奏连踢的概率;chain:踢完不歇、旁边紧接着再踢的概率,最多连 chainMax 下(2026-10-04 用户:「有时会带点节奏、可以连续踢」)
// 11-05 起间隔统一 25~35 秒(gap() 读 GAP,这里各阶段的 gap 只作记录)
flutter: { order: ['flick', 'flick', 'tap', 'flick'], gap: [25, 35], kick: false, again: 0, double: .45, follow: false, drum: 0, chain: 0 },
active: { order: ORDER, gap: [25, 35], kick: true, again: .34, double: 0, follow: true, drum: .4, chain: .3, chainMax: 3 },
late: { order: ['roll', 'butt', 'foot', 'roll', 'knee'], gap: [25, 35], kick: false, again: .15, double: 0, follow: true, slow: true, drum: .22, chain: .15, chainMax: 2 }
// 11-05 起间隔统一 25~35 秒,11-07 改 15~25 秒(gap() 读 GAP,这里各阶段的 gap 只作记录)
/* 11-07 用户:「20 周之后都踢」→ 三个阶段都以小脚丫为主(约 2/3 是脚),20~25 周也会真踢、带脚印 */
flutter: { order: ['foot', 'tap', 'foot', 'flick', 'foot'], gap: [15, 25], kick: false, again: 0, double: .45, follow: false, drum: 0, chain: 0 },
active: { order: ['foot', 'fist', 'foot', 'knee', 'foot', 'butt'], gap: [15, 25], kick: true, again: .34, double: 0, follow: true, drum: .4, chain: .3, chainMax: 3 },
late: { order: ['foot', 'roll', 'foot', 'butt', 'foot', 'knee'], gap: [15, 25], kick: false, again: .15, double: 0, follow: true, slow: true, drum: .22, chain: .15, chainMax: 2 }
};
// 原地连踢的节奏型(每拍间隔,秒):匀速「哒哒哒」、「哒哒—哒」、「哒—哒哒」、两下一组
const RHYTHMS = [[.42, .42, .42], [.3, .3, .75, .3], [.6, .28, .28], [.32, .9, .32], [.38, .38, .38, .38]];
@@ -97,7 +99,8 @@
// 两次之间隔多久:20~22 周最稀(再 +40%),越往后越接近本阶段的基准
/* 11-05 用户:「用户来到首页静止不动,至少停 25 秒、25~35 秒之间随机才踢一次,所有孕周都这样」→ 各阶段统一 25~35 秒,不再按阶段 / 20~22 周加长;
而且要「一直没动」:点屏幕、滑动都会把倒计时重新从 25~35 秒数起(见 restart() 调用处),回到首页、开关打开也从头数 */
const GAP = [25, 35];
/* 11-07 用户:「改成 15~25 秒一次」 */
const GAP = [15, 25];
const gap = () => GAP[0] + Math.random() * (GAP[1] - GAP[0]);
let lastInput = -1e9; /* 最近一次真正的手指 / 滚轮操作(图片加载、布局变化引起的 scroll 不算用户动了) */
const restart = () => { if (mode === 'wait') wait = gap(); };
@@ -456,12 +459,13 @@
// 脚印:脚跟 / 足弓外沿 / 前掌 / 五个脚趾,单位坐标(脚尖朝 -y),整体缩到鼓包的 0.62
const FOOT = [[0, .42, .2], [.1, .12, .15], [-.02, -.18, .24], [-.17, -.5, .1], [-.04, -.57, .08], [.07, -.55, .07], [.16, -.5, .06], [.23, -.41, .055]];
function footprint(x, y, rx, ry, ang, k) {
if (k < .25) return;
const a = (k - .25) / .75, f = .62, dark = [], lite = [];
/* 11-07 用户:「能看出小脚印」→ 压痕加深约 2.5 倍、整体放大到 0.7、顶到一半就开始显出来(原来淡到几乎看不见) */
if (k < .15) return;
const a = Math.min(1, (k - .15) / .6), f = .7, dark = [], lite = [];
for (const [px, py, r] of FOOT) {
// 压痕:中性灰、很淡;左上角错开一点白,像皮肤底下被顶出的浅浅轮廓,而不是画上去的图案
dark.push([px * f, py * f, r * f * 1.5, 'rgba(70,62,58,' + (.075 * a).toFixed(3) + ')']);
lite.push([px * f - .03, py * f - .04, r * f * 1.2, 'rgba(255,255,255,' + (.12 * a).toFixed(3) + ')']);
dark.push([px * f, py * f, r * f * 1.35, 'rgba(110,70,58,' + (.2 * a).toFixed(3) + ')']);
lite.push([px * f - .03, py * f - .04, r * f * 1.1, 'rgba(255,255,255,' + (.28 * a).toFixed(3) + ')']);
}
blob(x, y, rx, ry, ang, dark.concat(lite));
}