From 7c1661312e12ff5f69f0c16d1e06181114785c65 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 16 Sep 2026 12:18:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(mobile):=20=E6=89=8B=E6=9C=BAPopupWindow?= =?UTF-8?q?=E7=82=B9=E8=BE=93=E5=85=A5=E5=9F=9F=E5=BC=B9=E7=AA=97=E5=8D=B3?= =?UTF-8?q?=E5=85=B3=E2=80=94=E2=80=94.popupwindow=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E7=AB=AFposition:fixed=E9=92=89=E6=AD=BB=E8=A7=86=E5=8F=A3(?= =?UTF-8?q?=E4=B8=BB=E4=BF=AE:=E8=BD=AF=E9=94=AE=E7=9B=98=E6=94=B6?= =?UTF-8?q?=E7=BC=A9=E8=A7=86=E5=8F=A3=E5=90=8Efocus=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=8A=8Aabsolute=E5=BC=B9=E7=AA=97=E6=BB=9A?= =?UTF-8?q?=E5=87=BA=E5=8F=AF=E8=A7=86=E5=8C=BA)+focusin=E6=BB=9A=E5=8A=A8?= =?UTF-8?q?=E5=BD=92=E9=9B=B6=E5=AE=89=E5=85=A8=E7=BD=91+=5Fmobile=5Fclamp?= =?UTF-8?q?=E9=87=8D=E9=92=B3=E5=BD=92=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bricks/css/bricks.css | 5 +++++ bricks/popup.js | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/bricks/css/bricks.css b/bricks/css/bricks.css index 6b082aa..4bf50dc 100755 --- a/bricks/css/bricks.css +++ b/bricks/css/bricks.css @@ -1215,6 +1215,11 @@ hr { top: 0 !important; border-radius: 0 !important; box-sizing: border-box; + /* 2026-09-16 用户报障「手机待办详情点输入域弹窗即关」根因修复: + * .popup 基类是 position:absolute——软键盘弹出收缩视口后文档可滚, + * 浏览器 focus 自动滚动把 absolute 弹窗整块滚出可视区(视觉=弹窗没了), + * 部分内嵌浏览器 resize/clamp 补偿不来。fixed 钉死视口,文档怎么滚都不动。 */ + position: fixed !important; } /* 普通弹出控件(.popup:下拉/提示/锚定小窗)不许高出可视屏。 * :not(.popupwindow) —— PopupWindow 同时带两个类,它的高度由上面 diff --git a/bricks/popup.js b/bricks/popup.js index 3f019f1..4a42638 100644 --- a/bricks/popup.js +++ b/bricks/popup.js @@ -55,6 +55,20 @@ bricks.Popup = class extends bricks.VBox { if (this.auto_dismiss){ bricks.Body.bind('click', this.click_outside.bind(this)); } + // 2026-09-16 手机「点输入域弹窗即关」根因修复(安全网,CSS fixed 为主修): + // 软键盘弹出收缩视口后文档变可滚,浏览器 focus 自动滚动会把 absolute + // 弹窗整块滚出可视区(视觉=弹窗没了/键盘瞬关)。focusin 时若顶层 + // PopupWindow 开着,立即把文档滚动归零。全局只装一次。 + if (!bricks.Popup._focus_scroll_guard){ + bricks.Popup._focus_scroll_guard = true; + document.addEventListener('focusin', function(){ + if (!bricks.is_mobile || !bricks.is_mobile()) return; + var top = bricks.app.toppopup; + if (top && top.opened && top instanceof bricks.PopupWindow && window.scrollY){ + window.scrollTo(0, 0); + } + }, true); + } this.target_w = bricks.Body; this.moving_status = false; if (this.movable){ @@ -331,6 +345,11 @@ bricks.Popup = class extends bricks.VBox { el.style.setProperty('max-height', maxh + 'px', 'important'); this._mobile_clamped = true; } + // 2026-09-16:全屏弹窗重钳时把文档滚动归零——软键盘收缩视口后浏览器 + // focus 自动滚动可能已把 absolute 弹窗滚出可视区(点输入域"弹窗即关")。 + if (is_win && window.scrollY){ + window.scrollTo(0, 0); + } if (el.offsetWidth > vw){ el.style.setProperty('width', vw + 'px', 'important'); el.style.setProperty('max-width', vw + 'px', 'important');