diff --git a/app/src/mobile/index.ts b/app/src/mobile/index.ts index f5b509f34..303d13849 100644 --- a/app/src/mobile/index.ts +++ b/app/src/mobile/index.ts @@ -127,11 +127,14 @@ class App { document.addEventListener("touchend", (event) => { handleTouchEnd(event, siyuanApp); }, false); - window.addEventListener("keydown", (event) => { - mobileKeydown(siyuanApp, event); + window.addEventListener("keyup", () => { + window.siyuan.ctrlIsPressed = false; + window.siyuan.shiftIsPressed = false; + window.siyuan.altIsPressed = false; }); // 移动端删除键 https://github.com/siyuan-note/siyuan/issues/9259 window.addEventListener("keydown", (event) => { + mobileKeydown(siyuanApp, event); if (getSelection().rangeCount > 0) { const range = getSelection().getRangeAt(0); const editor = getCurrentEditor(); diff --git a/app/src/mobile/util/touch.ts b/app/src/mobile/util/touch.ts index f0c6b6b6f..03ed0f189 100644 --- a/app/src/mobile/util/touch.ts +++ b/app/src/mobile/util/touch.ts @@ -175,7 +175,7 @@ export const handleTouchMove = (event: TouchEvent) => { } // 正在编辑时禁止滑动 - if(!document.querySelector("#keyboardToolbar").classList.contains("fn__none")) { + if (!document.querySelector("#keyboardToolbar").classList.contains("fn__none")) { return; } // 只读状态下选中内容时时禁止滑动 @@ -231,7 +231,8 @@ export const handleTouchMove = (event: TouchEvent) => { hasClosestByAttribute(target, "data-type", "NodeAttributeView") || hasClosestByAttribute(target, "data-type", "NodeMathBlock") || hasClosestByAttribute(target, "data-type", "NodeTable") || - hasTopClosestByClassName(target, "list"); + hasTopClosestByClassName(target, "list") || + hasTopClosestByClassName(target, "protyle-breadcrumb__bar--nowrap"); if (scrollElement) { if (scrollElement.classList.contains("table")) { scrollElement = scrollElement.firstElementChild as HTMLElement; @@ -248,16 +249,26 @@ export const handleTouchMove = (event: TouchEvent) => { scrollElement = scrollElement.parentElement; } } - - if (scrollElement && ( - (xDiff < 0 && scrollElement.scrollLeft > 0) || - (xDiff > 0 && scrollElement.clientWidth + scrollElement.scrollLeft < scrollElement.scrollWidth) - )) { - scrollBlock = true; - return; + let noScroll = false; + if (scrollElement && scrollElement.scrollLeft === 0) { + scrollElement.scrollLeft = 1; + if (scrollElement.scrollLeft === 0) { + noScroll = true; + } else { + scrollElement.scrollLeft = 0; + } } - if (scrollBlock) { - return; + if (!noScroll) { + if (scrollElement && ( + (xDiff < 0 && scrollElement.scrollLeft > 0) || + (xDiff > 0 && scrollElement.clientWidth + scrollElement.scrollLeft < scrollElement.scrollWidth) + )) { + scrollBlock = true; + return; + } + if (scrollBlock) { + return; + } } } if (isFirstMove) { diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts index cfa726a96..bbad16259 100644 --- a/app/src/protyle/wysiwyg/index.ts +++ b/app/src/protyle/wysiwyg/index.ts @@ -2156,10 +2156,10 @@ export class WYSIWYG { }); hideElements(["hint", "util"], protyle); const ctrlIsPressed = isOnlyMeta(event); - /// #if !MOBILE const backlinkBreadcrumbItemElement = hasClosestByClassName(event.target, "protyle-breadcrumb__item"); if (backlinkBreadcrumbItemElement) { const breadcrumbId = backlinkBreadcrumbItemElement.getAttribute("data-id"); + /// #if !MOBILE if (breadcrumbId) { if (ctrlIsPressed && !event.shiftKey && !event.altKey) { checkFold(breadcrumbId, (zoomIn) => { @@ -2177,10 +2177,15 @@ export class WYSIWYG { // 引用标题时的更多加载 getBacklinkHeadingMore(backlinkBreadcrumbItemElement); } + /// #else + if (breadcrumbId) { + loadBreadcrumb(protyle, backlinkBreadcrumbItemElement); + } + /// #endif event.stopPropagation(); return; } - /// #endif + if (!event.shiftKey) { this.shiftStartElement = undefined; }