From afd2b72bcb7477d4d6d1f1612ba13318e8eb5b3c Mon Sep 17 00:00:00 2001 From: cnliucheng Date: Thu, 9 Jul 2026 14:41:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E6=A0=B9=E6=B2=BB=E7=9C=9F=E6=9C=BA?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=20fixed=20=E9=99=8D=E7=BA=A7(=E7=A7=BB?= =?UTF-8?q?=E5=87=BA=20.container=20+=20pageIn=20=E5=8E=BB=20transform)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:.page-enter 的 pageIn 动画含 transform,即使 to: transform:none, 真机 fill-mode 没真正消除 transform,.container 仍是 fixed 的包含块。 记录页内容超一屏时 mask 降级相对 .container(高>>视口),flex 居中把 弹窗放到 .container 中心(视口外),真机看不到(模拟器宽松所以正常)。 - records: 日历详情弹窗移出 .container.page-enter,fixed 相对视口; 加 style themeStyle 拿暗黑变量 - app.wxss: pageIn keyframes 去掉 transform 只留 opacity 淡入,根治所有 页面(settings 计划编辑器/timer 完成弹窗)的 fixed 降级 - calendar-heatmap: onDayTap 的 find 用 Number(day) 修真机 dataset 字符串化导致 === 失败;移除诊断日志 Co-Authored-By: Claude Fable 5 --- app.wxss | 15 ++++++++------- components/calendar-heatmap/calendar-heatmap.js | 9 ++++++--- pages/records/records.wxml | 12 ++++++------ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app.wxss b/app.wxss index 9946b19..4f145fd 100644 --- a/app.wxss +++ b/app.wxss @@ -129,11 +129,12 @@ image { } @keyframes pageIn { - from { opacity: 0; transform: translateY(20rpx); } - /* `none` (not translateY(0)) so the finished animation leaves NO transform - on .container - any non-none transform creates a containing block that - demotes descendant position:fixed to relative-to-container, breaking - full-screen modals (day-detail / plan-editor / completion) once the - page scrolls past one viewport height. */ - to { opacity: 1; transform: none; } + /* Opacity-only: any transform (even translateY(0) held by animation + fill-mode) makes .container a containing block that demotes descendant + position:fixed to relative-to-container, breaking full-screen modals on + real devices once the page scrolls past one viewport. The prior + `to: transform: none` did NOT hold on real devices, so drop transform + from the keyframes entirely. Pages still get a fade-in. */ + from { opacity: 0; } + to { opacity: 1; } } diff --git a/components/calendar-heatmap/calendar-heatmap.js b/components/calendar-heatmap/calendar-heatmap.js index 9d1540a..085c237 100644 --- a/components/calendar-heatmap/calendar-heatmap.js +++ b/components/calendar-heatmap/calendar-heatmap.js @@ -79,13 +79,16 @@ Component({ onDayTap(e) { const day = e.currentTarget.dataset.day - if (!day) return - const cell = this.data.weeks.flat().find(c => c && c.day === day) + if (!day && day !== 0) return + // dataset values can arrive as strings on real devices, which breaks + // the strict === against c.day (number). Normalize so the lookup + // works on both simulator and device. + const cell = this.data.weeks.flat().find(c => c && c.day === Number(day)) if (!cell || cell.duration <= 0) return this.triggerEvent('daytap', { year: this.properties.year, month: this.properties.month, - day, + day: cell.day, duration: cell.duration }) } diff --git a/pages/records/records.wxml b/pages/records/records.wxml index 1f18a5e..cd0d61e 100644 --- a/pages/records/records.wxml +++ b/pages/records/records.wxml @@ -113,11 +113,12 @@ - - + + + @@ -146,4 +147,3 @@ -