From 0343e3cc1c27478ab5bed1fb1a36ab0a6f23990a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 4 Feb 2026 22:48:00 +0800 Subject: [PATCH] :art: Improve soft keyboard toolbar pop-up https://github.com/siyuan-note/siyuan/issues/16548 Signed-off-by: Daniel <845765@qq.com> --- app/src/mobile/index.ts | 43 +++++++++++++++++++++++++----------- app/src/mobile/util/touch.ts | 2 +- app/src/types/index.d.ts | 6 ++--- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/app/src/mobile/index.ts b/app/src/mobile/index.ts index e6475819e..e58b01b9b 100644 --- a/app/src/mobile/index.ts +++ b/app/src/mobile/index.ts @@ -53,17 +53,7 @@ class App { dialogs: [], blockPanels: [], mobile: { - size: { - isLandscape: window.matchMedia && window.matchMedia("(orientation: landscape)").matches, - landscape: { - height1: window.innerWidth, - height2: window.innerWidth, - }, // 横屏 - portrait: { - height1: window.innerHeight, - height2: window.innerHeight, - } - }, + size: {}, docks: { outline: null, file: null, @@ -170,6 +160,19 @@ class App { } }); }); + + window.siyuan.mobile.size.isLandscape = window.matchMedia && window.matchMedia("(orientation: landscape)").matches; + if (window.siyuan.mobile.size.isLandscape) { + window.siyuan.mobile.size.landscape = { + height1: window.innerHeight, + height2: window.innerHeight, + } + } else { + window.siyuan.mobile.size.portrait = { + height1: window.innerHeight, + height2: window.innerHeight, + } + } } } @@ -199,15 +202,29 @@ window.addEventListener("resize", () => { // 获取键盘高度 window.siyuan.mobile.size.isLandscape = window.matchMedia && window.matchMedia("(orientation: landscape)").matches; if (window.siyuan.mobile.size.isLandscape) { + if (!window.siyuan.mobile.size.landscape) { + window.siyuan.mobile.size.landscape = { + height1: window.innerHeight, + height2: window.innerHeight, + } + } if (window.innerHeight < window.siyuan.mobile.size.landscape.height1) { window.siyuan.mobile.size.landscape.height2 = window.innerHeight; - } else { + } + if (window.innerHeight > window.siyuan.mobile.size.landscape.height1) { window.siyuan.mobile.size.landscape.height1 = window.innerHeight; } } else { + if (!window.siyuan.mobile.size.portrait) { + window.siyuan.mobile.size.portrait = { + height1: window.innerHeight, + height2: window.innerHeight, + } + } if (window.innerHeight < window.siyuan.mobile.size.portrait.height1) { window.siyuan.mobile.size.portrait.height2 = window.innerHeight; - } else { + } + if (window.innerHeight > window.siyuan.mobile.size.portrait.height1) { window.siyuan.mobile.size.portrait.height1 = window.innerHeight; } } diff --git a/app/src/mobile/util/touch.ts b/app/src/mobile/util/touch.ts index 772128447..9da64b383 100644 --- a/app/src/mobile/util/touch.ts +++ b/app/src/mobile/util/touch.ts @@ -29,7 +29,7 @@ const popSide = (render = true) => { export const handleTouchEnd = (event: TouchEvent, app: App) => { const target = event.target as HTMLElement; const wysisygElement = hasClosestByClassName(target, "protyle-wysiwyg", true); - if (!yDiff || Math.abs(yDiff) < 24) { + if (!yDiff || Math.abs(yDiff) < 8) { let editElement: HTMLElement; if (["INPUT", "TEXTAREA"].includes(target.tagName) && target.getAttribute("readonly") !== "readonly") { editElement = target; diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index e82f26af7..fc74180a2 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -489,12 +489,12 @@ interface ISiyuan { backStack?: IBackStack[], mobile?: { size: { - isLandscape:boolean, - landscape: { + isLandscape?: boolean, + landscape?: { height1: number, height2: number, // 键盘弹起时的高度 }, // 横屏 - portrait: { + portrait?: { height1: number, height2: number, }